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

时间:2008-10-02 17:27:16

标签: java ssl jsse

我看过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跟踪,虽然这非常有用,但我仍然希望能够逐步完成那些讨厌的代码。

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

  1. 可执行的JRE / JDK实现(不想构建一个)......
  2. 在我的Windows平台(XP)上运行......
  3. 包括来源......
  4. 该来源包括SSL“位”(JSSE等)......
  5. 理想情况下,SSL实施是Sun或OpenJDK版本。
  6. 我认为最接近的事情(如PW的答案StackOverflow: 87106中所述)是在OpenJDK 6 Source Release找到的OpenJDK源openjdk-6-src-b12-28_aug_2008.tar.gz,但我不是确保在Windows上运行匹配的可执行JDK / JRE。

8 个答案:

答案 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. 在目录结构中稍微向上,即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.rsa sun.security.ssl sun.security.provider & com.sun.net.ssl 打包到您计算机上的新文件夹(例如jsse-code)。
  5. 从命令行&转到该文件夹自己创建源jar。例如 jar -cvf jsse-src.jar *
  6. 你完成了。您现在拥有了可以附加到首选IDE(例如Eclipse)的jsse源代码库来调试JSSE代码。
  7. 由于
    阿亚斯

答案 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”。这是我做的:

  1. SunJSSE 类重命名为 SSLProvider ,并在代码中替换了对“SunJSSE”的所有引用。
  2. sun.security.ssl sun.security.ec 重构为2个新软件包: javaxt.ssl javaxt。 ec
  3. 查找/替换代码中对原始包名称的所有引用。例如,在SSLProvider.java类中,将“sun.security.ssl.SSLContextImpl”替换为“javaxt.ssl.SSLContextImpl”。
  4. 一旦有了新的安全提供程序,我就可以在代码中明确地引用它。例如:

      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

答案 2 :(得分:1)

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

  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. 现在,我们可以在this the repository中找到我们版本的节点。在我的情况下,我的标记将是 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中并进行愉快的编码。

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

答案 3 :(得分:0)

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

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

答案 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://adoptopenjdk.net/

并将其与源代码完全匹配

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

当前u172-b11是最新版本,但是它们是同步的,并且可以在所有平台上使用。