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跟踪,虽然这非常有用,但我仍然希望能够逐步完成那些讨厌的代码。
所以我认为我特别需要的是:
- 可执行的JRE / JDK实现(不想构建一个)…
- 这在我的Windows平台(XP)上运行……
- 这包括来源……
- 该源包括SSL“位”(JSSE等)……
- 理想情况下,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以进行调试的步骤。
- 在目录结构中稍微进行一下,即http://hg.openjdk.java.net/jdk8u/jdk8u-dev/jdk/file/4d6c03fb1039/src/share/classes/ repo。
- 单击左窗格中显示的“zip”或“gz”链接,下载源包。
- 但是这个包非常庞大,包含数千个* .java文件。 您通常不希望所有这些只是调试jsse.jar代码。
- 因此,最好将sun.security.rsa , sun.security.ssl , sun.security.provider和com.sun.net.ssl软件包复制到计算机上的新文件夹(例如jsse-code)。
- 从命令行转到该文件夹并自行创建源jar。
例如jar -cvf jsse-src.jar * - 你完成了。 您现在拥有了可以附加到首选IDE(例如Eclipse)的jsse源代码库来调试JSSE代码。
谢谢
阿亚斯
我使用OpenJDK下载Java 6:
http://download.java.net/openjdk/jdk6/
为了调试JSSE / SSL代码,我使用了sun.security.ssl和sun.security.ec包中的类,并创建了一个新库。 不幸的是,只是拥有一个包含所有源代码的库对我来说还不够。 我无法弄清楚如何让我的IDE(Netbeans)进入JSSE代码。 相反,它正在调用与JDK捆绑在一起的JSSE。
作为一种解决方法,我最终将ssl和ec包重构为一个新的“提供者”。 这是我做的:
- 将SunJSSE类重命名为SSLProvider ,并在代码中替换了对“SunJSSE”的所有引用。
- 将sun.security.ssl和sun.security.ec重构为2个新包: javaxt.ssl和javaxt.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存档:
据我所知,Sun的实现不是开源的。 您可以在此处下载开源JCE:
事实上,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://github.com/AdoptOpenJDK/openjdk-jdk8u
目前u172-b11是最新版本,但它们是同步的,可以在所有平台上运行。
您可以按照以下步骤从其mercurial存储库获取JSSE lib(Open JDK实现)的源代码,以创建源zip文件以附加到IDE进行调试。
-
获取你的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)
-
现在我们可以在这个存储库中找到我们版本的节点。 在我的情况下,我的标签将是jdk8u181-b13,因为我的构建版本是1.8.0_181-b13 ,其节点将是0cb452d66676,请记住java版本是jdk8u 。 我们可以通过单击左侧窗格中显示的“zip”或“gz”链接下载源包,然后手动将其重新打包为zip。 或者只选择您需要的包。
-
在这个例子中,我将下载目录
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 .
-
将源添加到IDE并进行编码。
注意:在此存储库中,可用的版本是:
- JDK6
- JDK7
- jdk7u
- jdk8
- jdk8u
- jdk9
- jdk10