问题标签 [jsse]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
30541 浏览

java - 在哪里可以找到 Java 6 JSSE/JCE 源代码?

我在哪里可以下载最新版本的 Java 的 JSSE 和 JCE 源代码?https://jdk6.dev.java.net/上提供的源代码构建不包括 javax.crypto (JCE) 包或 com.sun.net.ssl.internal (JSSE) 包。

无法调试这些类使得解决 SSL 问题变得异常困难。

0 投票
8 回答
12079 浏览

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

我已经看到在哪里可以找到 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 上运行。

0 投票
15 回答
108409 浏览

java - scp 通过 java

通过 Java 编程语言执行 scp 传输的最佳方法是什么?看来我可以通过 JSSE、JSch 或 bouncy castle java 库来执行此操作。这些解决方案似乎都没有一个简单的答案。

0 投票
2 回答
272 浏览

java - 通过 JSSE 连接结束 XML 流?

我有一个 Java 服务器,它接受使用 JSSE 的 SSL 连接,并在流中使用简单的 XML 消息格式。我希望服务器阅读完整的消息,然后发送回复。事实证明这非常困难,因为 org.xml.sax.XMLReader 想要读取整个流,然后调用 close()。我知道这看起来很奇怪,但是在带有 Sun JSSE 提供程序的 Java 6 中,这确实关闭了 SSLSocket 的两端,因此没有消息可以返回。我尝试在客户端使用 Socket 的 shutdownOutput() 方法,但 JSSE 不支持此方法。

我的解决方案是传递一个包装在自定义类中的 InputStream,该类静默忽略关闭请求,并指示流在遇到第一个空行时关闭。这将 XML 限制在通常有效的范围之外,但客户端可以在必要时轻松过滤掉输入中的空白行。有更好的解决方案吗?

0 投票
5 回答
192034 浏览

java - 如何在特定连接上使用不同的证书?

我要添加到我们的大型 Java 应用程序中的一个模块必须与另一家公司的 SSL 安全网站进行对话。问题是该站点使用自签名证书。我有一份证书副本以验证我没有遇到中间人攻击,我需要将此证书合并到我们的代码中,以便与服务器的连接成功。

这是基本代码:

如果没有对自签名证书进行任何额外的处理,这将在 conn.getOutputStream() 处死掉,但有以下例外:

理想情况下,我的代码需要教 Java 接受这个自签名证书,用于应用程序中的这一点,而不是其他任何地方。

我知道我可以将证书导入 JRE 的证书颁发机构存储区,这将允许 Java 接受它。如果我能提供帮助,那不是我想采取的方法。在我们所有客户的机器上为他们可能不使用的一个模块进行操作似乎非常具有侵入性;它会影响使用相同 JRE 的所有其他 Java 应用程序,即使任何其他 Java 应用程序访问该站点的可能性为零,我也不喜欢这样。这也不是一个简单的操作:在 UNIX 上,我必须获得访问权限才能以这种方式修改 JRE。

我还看到我可以创建一个 TrustManager 实例来进行一些自定义检查。看起来我什至可以创建一个 TrustManager,它在除此证书之外的所有实例中都委托给真正的 TrustManager。但是看起来 TrustManager 是全局安装的,我想这会影响我们应用程序的所有其他连接,这对我来说也不太合适。

设置 Java 应用程序以接受自签名证书的首选、标准或最佳方式是什么?我能完成上面提到的所有目标,还是不得不妥协?是否有涉及文件和目录以及配置设置以及几乎没有代码的选项?

0 投票
9 回答
439518 浏览

java - 通过 HTTPS/SSL 的 Java 客户端证书

我正在使用 Java 6,并尝试HttpsURLConnection使用客户端证书针对远程服务器创建一个。
服务器正在使用自签名根证书,并要求提供受密码保护的客户端证书。我已将服务器根证书和客户端证书添加到我在/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/security/cacerts(OSX 10.5)中找到的默认 java 密钥库中。密钥库文件的名称似乎表明客户端证书不应该放在那里?

无论如何,将根证书添加到这个商店解决了臭名昭著的问题javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed' problem.

但是,我现在被困在如何使用客户端证书上。我尝试了两种方法,但都没有让我到任何地方。
首先,也是首选,尝试:

我尝试跳过 HttpsURLConnection 类(不理想,因为我想与服务器交谈 HTTP),而是这样做:

我什至不确定客户端证书是这里的问题。

0 投票
2 回答
5219 浏览

java - 如何使用 JSSE 以编程方式将公钥 .cer 文件导入 java 密钥库?

我想获取从 java keytool 命令生成的公钥 .cer 文件,如下所示:

“keytool -export -alias privatekey -file publickey.cer -keystore privateKeys.store”

并将其导入到一个新的空 java 密钥库中,如下所示:

“keytool -import -alias publiccert -file publickey.cer -keystore publicCerts.store”

除了我想使用 JSSE 以编程方式进行导入。

Stack Overlords,施展你的魔法!谢谢!

0 投票
4 回答
76214 浏览

java - 在 JVM 中注册多个密钥库

我有两个应用程序在同一个 Java 虚拟机中运行,并且都使用不同的密钥库和信任库。

一个可行的选择是使用单个密钥库并将所有其他密钥库导入共享密钥库(例如 keytool -import),但如果我可以为在同一 jvm 中运行的不同应用程序使用单独的密钥库,这将真的有助于我的要求。

我可以将密钥库和信任库设置为用作 jvm 参数或系统属性,如下所示:

或者

但是这种方法的问题在于它指定了要在 JVM 级别使用的密钥库/信任库,因此在同一个 JVM 中运行的所有应用程序都会获得相同的密钥库/信任库。

我还尝试创建自定义 SSLContext 并将其设置为默认值,但它也为在同一 JVM 中运行的所有应用程序设置上下文。

我希望能够在不修改单个应用程序代码的情况下使用不同的密钥库/信任库。

除了 jre 中的默认密钥库/证书之外,还可以将多个密钥库动态注册到 jvm 中的解决方案会很棒。

该解决方案将以这种方式工作:

  • 当 JVM 启动时,它会从 jre/certs 文件夹加载所有默认证书/密钥库(未指定密钥库时的默认 java 行为)。
  • 当 App 1 加载时,它会注册它的密钥库,
  • 然后当 App 2 加载时,它会注册它的密钥库......

请让我知道您的想法或解决方案。提前致谢!

0 投票
1 回答
2418 浏览

ssl - 需要身份验证时如何连接到启用了 ssl 的服务器连接通道的队列管理器

我正在尝试编写一个 java 应用程序连接到启用 SSL 的服务器连接通道。

到目前为止,通过将身份验证设置为“可选”,我已成功连接到频道。但是,当我将其设置为“必需”时,连接失败。

这是我所做的:

  1. 为队列管理器创建密钥数据库,为 java 客户端用户创建密钥库。
  2. 为队列管理器和客户端用户创建密钥/自签名证书,名称以 ibmwebspheremq 为前缀。
  3. 为队列管理器和客户端导出、交换和导入证书。(当被问及我是否信任队列管理器证书时,我确实回答了“是”)。
  4. 信任库和密钥库的位置和密码设置为指向客户端的相同密钥库,原始创建的客户端用户密钥和导入的队列管理器密钥所在的位置。

在其他设置相同的情况下,如果我切换回“可选”身份验证,则连接正常。

我认为我对这个 ssl authenticationaion 理解不正确,但无法弄清楚是什么。

有人可以帮助我吗?

0 投票
5 回答
285579 浏览

java - java - trustStore 的路径 - 设置属性不起作用?

我已经设置了一个自签名证书来测试 ssl java 连接 - 但是,它拒绝找到 java trustStore。除了将类编译到的文件夹(我使用netbeans)和/java/jre6/bin之外,我还在/Java/jre6/lib/security中保存了它的副本,因为以上都不起作用,因为当我运行以下命令时 - trustStore = null。

如何正确设置路径?

************更新************ 使用 getFile() 方法和更多调试数据:

运行:java.lang.NullPointerException 类路径:C:\Users\Main\Documents\NetBeansProjects\sslTest\build\classes;C:\Users\Main\Documents\NetBeansProjects\sslTest\src 在 ssltest.Main.main(Main.java :15) 未定义 javax.net.ssl.trustStore 构建成功(总时间:0 秒)