Java JDK/JRE源代码与匹配的JSSE(SSL)源代码和匹配的可运行JDK/JRE?

Java JDK/JRE源代码与匹配的JSSE(SSL)源代码和匹配的可运行JDK/JRE?,java,ssl,jsse,Java,Ssl,Jsse,我见过 我自己也问了这个问题 但我不认为这两个问题都足够具体,可以得到我真正想要的答案,所以我将尝试一种更具体的方式来回答这个问题 基本上,我试图解决的问题是,我希望能够在Windows上使用Eclipse调试器,并进入Java SSL类(JSSE),以帮助我调试SSL问题,以及更好地理解SSL过程。顺便说一句,我熟悉(并使用)javax.net.debug=ssl | all系统属性来获取ssl跟踪,虽然这非常有用,但我仍然希望能够逐步完成这段讨厌的代码 所以我认为我特别需要的是: 一个可执行

我见过 我自己也问了这个问题 但我不认为这两个问题都足够具体,可以得到我真正想要的答案,所以我将尝试一种更具体的方式来回答这个问题

基本上,我试图解决的问题是,我希望能够在Windows上使用Eclipse调试器,并进入Java SSL类(JSSE),以帮助我调试SSL问题,以及更好地理解SSL过程。顺便说一句,我熟悉(并使用)javax.net.debug=ssl | all系统属性来获取ssl跟踪,虽然这非常有用,但我仍然希望能够逐步完成这段讨厌的代码

所以我认为我特别需要的是:

  • 一个可执行的JRE/JDK实现(不想构建一个)
  • 在我的Windows平台(XP)上运行的
  • 这包括来源
  • 该源包括SSL“位”(JSSE等)
  • 理想情况下,SSL实现是Sun或OpenJDK版本

  • 我认为最接近的东西(如PW的回答中所述)是在找到的OpenJDK源代码OpenJDK-6-src-b12-28_aug_2008.tar.gz,但我不确定是否有与之匹配的可执行JDK/JRE可以在Windows上运行。

    据我所知,Sun实现不是开源的。您可以在此处下载开源JCE:


    事实上,SSL实现包含在OpenJDK源代码中,但由于某些原因,它没有包含在标准源代码Zip文件中。我不知道为什么


    我不知道通常从哪里获取OpenJDK源代码;我通过apt-get-source-openjdk-6在Debian上获得了它们。SSL实现源代码位于
    jdk/src/share/classes/javax/net/SSL

    我使用了Java 6的OpenJDK下载:

    为了调试JSSE/SSL代码,我使用了sun.security.SSLsun.security.ec包中的类,并创建了一个新库。不幸的是,仅仅拥有一个包含所有源代码的库对我来说是不够的。我不知道如何让我的IDE(Netbeans)进入JSSE代码。相反,它调用了与JDK捆绑在一起的JSSE

    作为一种解决方法,我最终将ssl和ec包重构为一个新的“提供者”。以下是我所做的:

  • SunJSSE类重命名为SSLProvider,并替换代码中对“SunJSSE”的所有引用
  • sun.security.sslsun.security.ec重构为两个新包:javaxt.ssljavaxt.ec
  • 查找/替换代码中对原始包名称的所有引用。例如,在SSLProvider.java类中,将“sun.security.ssl.SSLContextImpl”替换为“javaxt.ssl.SSLContextImpl”
  • 一旦我有了一个新的安全提供者,我就可以在代码中显式引用它。例如:

      java.security.Provider provider = new javaxt.ssl.SSLProvider();
      java.security.Security.addProvider(provider);
      SSLContext sslc = SSLContext.getInstance("TLS", "SSLProvider");
    
    通过显式设置安全提供程序,我现在可以删除断点并将打印语句抛出到我的心上:-)

    如果有人感兴趣,我已经在这里发布了“SSLProvider”源的zip存档:


    您可以在这里获得JSSE lib(开放JDK实现)的源代码-

    创建源jar文件以附加到IDE进行调试的步骤

  • 在目录结构的上面一点,即回购
  • 单击左窗格中的“zip”或“gz”链接下载源代码包
  • 但是这个包非常庞大,包含数千个*.java文件。您通常不希望所有这些都只是调试jsse.jar代码
  • 因此,最好只将sun.security.rsasun.security.sslsun.security.provider&com.sun.net.ssl包复制到计算机上的新文件夹中(比如jsse代码)
  • 从命令行转到该文件夹并自己创建源jar。 jar-cvf jsse-src.jar*
  • 你完了。现在您有了jsse源库,可以将其附加到首选IDE(例如,-Eclipse)以调试jsse代码
  • 谢谢

    Ayas

    Sun Java版本的JSSE源代码以前可通过。自从Oracle收购以来,它似乎已经消失了,但我希望我是错的。

    我最终在运行eclipse luna和javac 1.8.0_171的Mac OS X High Sierra 10.13.4上做了以下工作

    在同样运行OpenJDK和JavaC1.8.0_171的ubuntu机器上

    apt get install openjdk-8-source
    cd-tmp
    解压/usr/lib/jvm/openjdk-8/src.zip“sun/security/*”
    zip-r jsse src sun
    
    我没有包括com/sun/net/ssl内容,但在我的例子中已经足够好了


    然后我将
    jsse src.zip
    复制到mac上的
    /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/
    ,并将eclipse指向该位置。

    接下来,您可以下载OpenJDK:

    并将其与源代码完全匹配


    目前,u172-b11是最新版本,但它们是同步的,可以在所有平台上工作。

    您可以按照以下步骤从其mercurial存储库获取JSSE lib(开放JDK实现)的源代码,以创建一个源zip文件,用于附加到IDE进行调试

  • 获取java构建版本(在我的例子中,构建版本是1.8.0_181-b13)

    您可能会得到如下结果:

    java version "1.8.0_181"
    Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
    
  • 现在,我们可以在中找到版本的节点。在我的例子中,我的标签将是jdk8u181-b13,因为我的构建是1.8.0_181-b13,它的节点将是0cb452d6676请记住java版本是jdk8u。我们可以通过点击左窗格中的“zip”或“gz”链接下载源代码包,并手动将其重新打包为zip。或者只选择您需要的软件包

  • 在本例中,我将下载所有pac
    java version "1.8.0_181"
    Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
    
    version=jdk8u
    node=0cb452d66676
    mkdir ~/temp
    cd ~/temp
    wget http://hg.openjdk.java.net/$version/$version/jdk/archive/$node.zip/src/share/classes/
    unzip $node.zip -d $version-$node
    cd jdk-$node/src/share/classes/
    zip -r $version-$node-src.zip .