我看过Where to find Java 6 JSSE/JCE Source Code? 并自己问了这个问题 How to get JRE/JDK with matching source?但我不知道其中任何一个都不足以得到我真正追求的答案,所以我将尝试更具体的问题版本。
基本上我要解决的问题是我希望能够在Windows上使用我的Eclipse调试器并进入Java SSL类(JSSE)来帮助我调试SSL问题以及只是理解SSL流程更好。 BTW我熟悉(并使用)javax.net.debug = ssl | all系统属性来获取SSL跟踪,虽然这非常有用,但我仍然希望能够逐步完成那些讨厌的代码。
所以我认为我特别需要的是:
我认为最接近的事情(如PW的答案StackOverflow: 87106中所述)是在OpenJDK 6 Source Release找到的OpenJDK源openjdk-6-src-b12-28_aug_2008.tar.gz,但我不是确保在Windows上运行匹配的可执行JDK / JRE。
答案 0 :(得分:7)
您可以在此处获取JSSE lib(Open JDK实现)的源代码 - http://hg.openjdk.java.net/jdk8u/jdk8u-dev/jdk/file/4d6c03fb1039/src/share/classes/sun/security/ssl
创建源jar文件以附加到IDE以进行调试的步骤。
由于
阿亚斯
答案 1 :(得分:1)
我使用OpenJDK下载Java 6:
http://download.java.net/openjdk/jdk6/
为了调试JSSE / SSL代码,我使用了 sun.security.ssl 和 sun.security.ec 包中的类,并创建了一个新库。不幸的是,只是拥有一个包含所有源代码的库对我来说还不够。我无法弄清楚如何让我的IDE(Netbeans)进入JSSE代码。相反,它正在调用与JDK捆绑在一起的JSSE。
作为一种解决方法,我最终将ssl和ec包重构为一个新的“Provider”。这是我做的:
一旦有了新的安全提供程序,我就可以在代码中明确地引用它。例如:
java.security.Provider provider = new javaxt.ssl.SSLProvider();
java.security.Security.addProvider(provider);
SSLContext sslc = SSLContext.getInstance("TLS", "SSLProvider");
通过明确设置安全提供程序,我现在可以删除断点并将打印语句丢弃到我心中: - )
如果有人有兴趣,我在这里发布了“SSLProvider”来源的zip存档:
答案 2 :(得分:1)
您可以按照以下步骤从其库中获取JSSE lib(Open JDK实现)的源代码,以创建用于附加到IDE进行调试的源zip文件。
获取您的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)
现在,我们可以在this the repository中找到我们版本的节点。在我的情况下,我的标记将是 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中并进行愉快的编码。
注意::在此存储库中,可用版本为:
答案 3 :(得分:0)
据我所知,Sun的实现不是开源的。您可以在此处下载开源JCE:
答案 4 :(得分:0)
事实上,SSL实现包含在OpenJDK源中,但由于某些原因不在标准源Zip文件中。我不知道为什么。
我不知道通常会在哪里获取OpenJDK来源;我通过apt-get source openjdk-6
在Debian上获得了它们。 SSL实施源位于jdk/src/share/classes/javax/net/ssl
。
答案 5 :(得分:0)
以前可以通过Sun Community Source License Program获得Sun Java版本的JSSE源代码。自甲骨文收购以来它似乎已经消失,但我希望我错了。
答案 6 :(得分:0)
我最终在运行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指向那个。
答案 7 :(得分:0)
接着,您可以下载OpenJDK:
并将其与源代码完全匹配
https://github.com/AdoptOpenJDK/openjdk-jdk8u
当前u172-b11是最新版本,但是它们是同步的,并且可以在所有平台上使用。