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

13
我曾经看到过 如何找到Java 6 JSSE/JCE源代码?,并且也问过这个问题 如何获取与源代码相匹配的JRE/JDK?,但我认为这些问题都不够具体,无法得到我想要的答案,因此我将尝试提出一个更加具体的问题。
基本上,我正在尝试解决的问题是,我希望能够在Windows上使用Eclipse调试器,并进入Java SSL类(JSSE)来帮助我调试SSL问题,以及更好地理解SSL过程。顺便说一下,我熟悉(并使用)javax.net.debug=ssl|all系统属性来获取SSL跟踪信息,虽然这非常有帮助,但我仍然希望能够步入那些令人头疼的代码中。
所以我认为我特别需要的是:
  1. 可执行的JRE / JDK实现(不想构建一个)...
  2. 在我的Windows平台(XP)上运行...
  3. 包含源代码...
  4. 该源代码包括SSL "bits"(JSSE等)...
  5. 最好使用Sun或OpenJDK版本的SSL实现。
我认为最接近的东西(如PW的回答中所述 StackOverflow:87106)是OpenJDK源代码openjdk-6-src-b12-28_aug_2008.tar.gz,可以在 OpenJDK 6源代码发布版上找到,但我不确定是否有与之匹配的可执行的JDK / JRE,可以在Windows上运行。

我已经问过自己这个问题好几次了,很高兴有人在论坛上问了它。现在正是一个好时机。 - anjanb
8个回答

9
你可以在这里获取JSSE lib(Open JDK实现)的源代码 - http://hg.openjdk.java.net/jdk8u/jdk8u-dev/jdk/file/4d6c03fb1039/src/share/classes/sun/security/ssl 创建用于调试的源jar文件的步骤如下:
  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源库。
谢谢
Ayas

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包重构成了一个新的“提供者”。以下是我所做的:
1. 将SunJSSE类重命名为SSLProvider,并替换代码中所有对“SunJSSE”的引用。 2. 将sun.security.ssl和sun.security.ec重构为两个新的包:javaxt.ssl和javaxt.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”源代码的压缩文件:

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


它没有回答“在哪里找到”源代码的问题:-1。 - try-catch-finally
@try-catch-finally 实际上,原问题包括找到源代码的链接。此外,OP问如何调试Java SSL类。因此我的答案是合适的。请重新考虑-1。 - Peter

1
你可以通过以下步骤从JSSE lib(Open JDK实现)的Mercurial存储库获取源代码,创建一个源代码Zip文件以便附加到IDE进行调试。
  1. Get your java build version (in my case the build is 1.8.0_181-b13)

    java -version
    

    Probably you will get a result like this:

    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. Now we can find the node for our version in this the repository. In my case my tag will be jdk8u181-b13 because my build is 1.8.0_181-b13 and its node will be 0cb452d66676 remember that the java version is jdk8u. We can download the source package by clicking on the "zip" or "gz" links that you see at the left pane and manually repack it as a zip. Or select only the packages you need.

  3. In this example I will download all the packages under the directory classes. To this end, replace the version jdk8u and node 0cb452d66676 in this script to download the source code, and repack it as a src zip file.

    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. Add the source to your IDE and happy coding.

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


0

0
实际上,SSL实现已包含在OpenJDK源代码中,但由于某种原因未包含在标准源代码压缩文件中。我不知道为什么。
我不知道通常应该从哪里获取OpenJDK源代码;我通过Debian的apt-get source openjdk-6获取了它们。SSL实现源代码位于jdk/src/share/classes/javax/net/ssl

谢谢你的提示。我确实看到了你提到的源代码。我原来问题的第二部分是“是否有与源代码匹配的JRE或JDK VM?”。由于不太熟悉OpenJDK,你能否获取各种OpenJDK版本的预构建VM? - Chris Markle

0

在Sun Java发布之前,Sun Java的JSSE源代码曾经通过Sun社区源代码许可计划提供。自从Oracle接管以来,它似乎已经消失了,但我希望我对此是错误的。


0

我们在谈论JSSE而不是JCE,它们并不相同。Bouncycastle无法替代JDK中集成的JSSE。BC的部分功能可以被使用(例如RSA Cipher等)。 - sweisgerber.dev

0
我最终在运行eclipse luna和javac 1.8.0_171的Mac OS X High Sierra 10.13.4上执行了以下操作:
在一台运行open jdk和javac 1.8.0_171的ubuntu机器上也进行了相同的操作。
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 复制到 mac 上的 /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/ 并将 eclipse 指向那里。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接