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

2022-09-04 22:03:32

我已经看过在哪里可以找到Java 6 JSSE / JCE源代码?并问过自己如何获得具有匹配源代码的JRE / JDK的问题?但是我两者都不够具体,无法获得我真正想要的答案,所以我将尝试一种更具体的问题版本。

基本上,我试图解决的问题是,我希望能够在Windows上使用我的Eclipse调试器,并逐步进入Java SSL类(JSSE)来帮助我调试SSL问题,并更好地理解SSL过程。顺便说一句,我熟悉(并使用)javax.net.debug=ssl|所有系统属性来获取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,但我不确定是否有匹配的可执行JDK / JRE可以在Windows上运行。


答案 1

你可以在这里获得JSSE lib(开放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/ 存储库。
  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. 大功告成。现在,您有一个 jsse 源代码库,可以将其附加到首选 IDE(例如 - Eclipse)以调试 JSSE 代码。

谢谢
阿亚斯


答案 2

我使用了Java 6的OpenJDK下载:

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 成 2 个新包:javaxt.ssljavaxt.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”来源的zip存档:

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