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

我在哪里可以找到Java 6 JSSE / JCE源代码? 并问自己如何获得匹配源的JRE / JDK? 但我不知道其中任何一个都没有具体到足以得到我真正追求的答案,所以我将尝试更具体的问题版本。

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

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

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

我认为最接近的事情(如PW的答案StackOverflow:87106中所述 )是在OpenJDK 6 Source Release中找到的OpenJDK源openjdk-6-src-b12-28_aug_2008.tar.gz,但我不确定是否有匹配的可执行JDK / JRE用于在Windows上运行。

你可以在这里获得JSSE lib的源代码(Open JDK实现) – http://hg.openjdk.java.net/jdk8u/jdk8u-dev/jdk/file/4d6c03fb1039/src/share/classes/sun/security/ SSL

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

  1. 在目录结构中稍微进行一下,即http://hg.openjdk.java.net/jdk8u/jdk8u-dev/jdk/file/4d6c03fb1039/src/share/classes/ repo。
  2. 单击左窗格中显示的“zip”或“gz”链接,下载源包。
  3. 但是这个包非常庞大,包含数千个* .java文件。 您通常不希望所有这些只是调试jsse.jar代码。
  4. 因此,最好将sun.security.rsasun.security.sslsun.security.providercom.sun.net.ssl软件包复制到计算机上的新文件夹(例如jsse-code)。
  5. 从命令行转到该文件夹​​并自行创建源jar。
    例如jar -cvf jsse-src.jar *
  6. 你完成了。 您现在拥有了可以附加到首选IDE(例如Eclipse)的jsse源代码库来调试JSSE代码。

谢谢
阿亚斯

我使用OpenJDK下载Java 6:

http://download.java.net/openjdk/jdk6/

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

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

  1. SunJSSE类重命名为SSLProvider ,并在代码中替换了对“SunJSSE”的所有引用。
  2. sun.security.sslsun.security.ec重构为2个新包: javaxt.ssljavaxt.ec
  3. 查找/替换代码中对原始包名称的所有引用。 例如,在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存档:

http://www.javaxt.com/download/?/jsse/SSLProvider.zip

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

http://www.bouncycastle.org/java.html

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

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

Sun Java版本的JSSE源代码以前可通过Sun社区源许可计划获得 。 自Oracle收购以来它似乎已经消失,但我希望我错了。

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

在ubuntu机器上也运行open jdk和javac 1.8.0_171

 apt-get install openjdk-8-source cd tmp unzip /usr/lib/jvm/openjdk-8/src.zip "sun/security/*" zip -r jsse-src sun 

我没有包含com / sun / net / ssl的东西,但在我的情况下还不错。

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

关注此问题,您可以下载OpenJDK:

https://adoptopenjdk.net/

并将其与源代码完全匹配

https://github.com/AdoptOpenJDK/openjdk-jdk8u

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

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

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

     java -version 

    可能你会得到这样的结果:

     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) 
  2. 现在我们可以在这个存储库中找到我们版本的节点。 在我的情况下,我的标签将是jdk8u181-b13,因为我的构建版本是1.8.0_181-b13 ,其节点将是0cb452d66676,请记住java版本是jdk8u 。 我们可以通过单击左侧窗格中显示的“zip”或“gz”链接下载源包,然后手动将其重新打包为zip。 或者只选择您需要的包。

  3. 在这个例子中,我将下载目录classes下的所有包。 为此, 在此脚本中替换版本jdk8u和节点0cb452d66676以下载源代码,并将其重新打包为src zip文件。

     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 . 
  4. 将源添加到IDE并进行编码。

注意:在此存储库中,可用的版本是:

  • JDK6
  • JDK7
  • jdk7u
  • jdk8
  • jdk8u
  • jdk9
  • jdk10