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“位”(JSSE 等)......
  5. 理想情况下,SSL 实现是 Sun 或 OpenJDK 版本。

我认为最接近的东西(如 PW 的答案StackOverflow: 87106中所述)是 OpenJDK 源代码 openjdk-6-src-b12-28_aug_2008.tar.gz 在OpenJDK 6 Source Release中找到,但我不确定是否有匹配的可执行 JDK /JRE 用于在 Windows 上运行。

4

8 回答 8

9

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

谢谢阿亚斯
_

于 2016-05-30T06:38:46.310 回答
1

我使用了 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.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

于 2012-03-10T10:03:28.223 回答
1

您可以按照以下步骤从其 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. 现在我们可以在这个存储库中找到我们版本的节点。在我的例子中,我的标签是jdk8u181-b13因为我的构建是1.8.0_181-b13并且它的节点是0cb452d66676请记住 java 版本是jdk8u。我们可以通过单击左侧窗格中看到的“zip”或“gz”链接来下载源代码包,然后手动将其重新打包为 zip。或者只选择您需要的包。

  3. 在这个例子中,我将下载目录下的所有包classes。为此,将本脚本中的jdk8u版本节点 0cb452d66676替换为下载源代码,并重新打包成srczip文件。

    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 和愉快的编码中。

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

于 2018-07-26T09:21:33.573 回答
0

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

我不知道通常会从哪里获取 OpenJDK 源;我通过apt-get source openjdk-6. SSL 实现源位于jdk/src/share/classes/javax/net/ssl.

于 2011-03-29T21:29:40.613 回答
0

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

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

于 2008-10-10T05:20:49.813 回答
0

接下来,您可以下载 OpenJDK:

https://adoptopenjdk.net/

并将其与源代码完全匹配

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

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

于 2018-07-23T18:35:40.197 回答
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。

于 2018-06-07T13:41:11.443 回答
0

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

于 2016-05-30T07:59:51.620 回答