java - 为什么会出现握手失败 (Java SSL)

标签 java exception ssl cxf handshake

我正在通过 HTTPS 连接到网络服务。我已经完成了所有我认为需要让它工作的事情,但最后我得到了握手失败。

我发现作为一个新用户,由于“垃圾邮件保护”,我不能发布超过 2 个链接——thanx 很多 stackoverflow……无论如何这里有一个指向 pastebin 帖子的链接,所有链接都被拼写出来了…… .所以当我在这里写“链接#1”时,它是对这些链接的引用:http://pastebin.com/y4zGNRC7

  • 我使用 HttpClient(服务 URL 上的 GET)验证了相同的行为,并实际通过 CXF 代理调用网络服务
  • 我正在设置 keystore 和信任库 - 我尝试了“代码中”方式(链接#1)和设置系统属性 - 即 System.setProperty("javax.net.ssl.keyStore", "mykeystore .jks");
  • SSL 调试已开启 (javax.net.debug=all)
  • SSL 调试脱口而出 keystore 和 truststore 的内容(即看起来像 java“知道它们”)- link#2
  • 似乎正在进行一些客户端-服务器通信,但由于某种原因它崩溃了链接#3
  • 我在浏览器 (Chrome) 中使用客户端和 CA 证书并使用 openssl s_client 成功连接到服务器
  • wireshark 显示来自 java (link#4) 的客户端-服务器对话比来自 Chrome (link#5) 的更少

另一个奇怪的事情是,当我设置 keystore 和不设置 keystore 时,我似乎得到了相同的行为(唯一的区别是,当我设置 keystore 时, keystore 的内容会打印在控制台中,但是就是这样)。

我试着用谷歌搜索这个问题,我在 stackoverflow 上看到了许多类似的帖子,但没有任何帮助。 我尝试更改协议(protocol)版本(“TLSv1”、“SSLv3”,甚至是奇怪的 v2 Hello)。 任何帮助将不胜感激 - 也许我可能忽略了一些基本的事情......我在这里变得绝望...... 谢谢

PS 我在 Fedora Core 15(64 位)上运行 java 1.6 update 30

最佳答案

问题在于,即使设置了 keystore 和信任库,java 仍决定不将客户端证书发送到服务器。这是因为服务器请求的证书是由 RootCA 机构签署的,但客户端证书是由 SubCA 机构签署的(由 RootCA 颁发)。

最初 keystore 只包含客户端证书,信任库包含 SubCA 证书。 然后我也尝试将 SubCA 证书添加到 keystore ,但 java 只是忽略了它。

所以这解决了 hanshake 失败之谜,但不是我的问题。

我为此创建了一个单独的问题...叹息:-( why doesn't java send the client certificate during SSL handshake?

关于java - 为什么会出现握手失败 (Java SSL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9249158/

相关文章:

java - Spring Security HTTP POSTMAN - 登录 - 状态 405 - 不允许方法

java - 如何处理以下代码中的运行时错误?我正在编写一个代码来查找java中数字的第一位数字

java - 我怎样才能捕捉到另一个线程异常

ssl - NGINX 不会监听 443 端口

java - 我被教导说并发条件不一定需要写在循环中,这与 oracle 文档所说的相反

java - 使用Optaplanner解决VRPTWPD

c++ - 如何捕获 I/O 异常(确切地说是 I/O,不是 std::exception)

laravel - 如何处理 Laravel 5 中的 TokenMismatch 异常

firefox - 在 Firefox 中,我可以禁用 "Website certified by an unknown authority"SSL 证书警告对话框吗?

c - C 中的 SSL 包装器流