【问题标题】:JDK/JRE source code with matching JSSE (SSL) source code and matching runnable JDK / JRE?JDK/JRE 源代码与匹配的 JSSE (SSL) 源代码和匹配的可运行 JDK/JRE?
【发布时间】:2010-09-14 21:08:43
【问题描述】:

我见过Where to find Java 6 JSSE/JCE Source Code? 并自己问了这个问题 How to get JRE/JDK with matching source? 但我没有足够具体的答案来获得我真正想要的答案,所以我将尝试一个更具体的问题版本。

基本上我要解决的问题是我希望能够在 Windows 上使用我的 Eclipse 调试器并进入 Java SSL 类 (JSSE) 来帮助我调试 SSL 问题以及了解SSL进程更好。顺便说一句,我熟悉(并使用)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,但我不确定是否有匹配可以在 Windows 上运行的可执行 JDK / JRE。

【问题讨论】:

  • 我已经多次问过自己这个问题。好在有人在论坛上提问。这是一个美好的时光。

标签: java ssl jsse


【解决方案1】:

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

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

【讨论】:

  • 我们在这里讨论的是 JSSE 而不是 JCE,两者是不一样的。 Bouncycastle 无法替代 JDK 中集成的 JSSE。部分 BC 可以使用(例如 RSA Cipher 等)
【解决方案2】:

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

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

【讨论】:

  • 感谢您的提示。我确实看到了您指出的来源。我最初问题的第二部分是“是否有匹配的 JRE 或 JDK VM 与源匹配?”。对 OpenJDK 不太熟悉,能否为各种 OpenJDK 版本预构建 VM?
【解决方案3】:

我使用 Java 6 的 OpenJDK 下载:

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。欧共体
  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

【讨论】:

  • 它没有回答在哪里可以找到来源:-1
  • @try-catch-finally 实际上,原始问题包括指向哪里可以找到源的链接。此外,OP 询问如何调试 Java SSL 类。因此我的回答。请重新考虑 -1。
【解决方案4】:

您可以在此处获取 JSSE lib (Open JDK implementation) 的源代码 - 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.provider com.sun.net.ssl 打包到您计算机上的新文件夹(比如说 jsse-code)中。
  5. 从命令行转到该文件夹​​并自行创建源 jar。
    例如 jar -cvf jsse-src.jar *
  6. 你已经完成了。您现在拥有了 jsse 源库,您可以将其附加到首选 IDE(例如 - Eclipse)以调试 JSSE 代码。

谢谢
阿亚斯

【讨论】:

    【解决方案5】:

    Sun Java 版本的 JSSE 源代码以前可通过 Sun Community Source License Program 获得。自从甲骨文收购以来,它似乎已经消失了,但我希望我错了。

    【讨论】:

      【解决方案6】:

      我最终在运行 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 复制到/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/ 的mac 并将eclipse 指向它。

      【讨论】:

        【解决方案7】:

        后续可以下载OpenJDK:

        https://adoptopenjdk.net/

        并将其与源代码完全匹配

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

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

        【讨论】:

          【解决方案8】:

          您可以按照以下步骤从其 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. 现在我们可以在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 并进行愉快的编码。

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

          【讨论】:

            猜你喜欢
            • 2010-11-27
            • 2011-06-24
            • 1970-01-01
            • 1970-01-01
            • 2020-06-09
            • 1970-01-01
            • 2020-11-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多