小编Jak*_*atý的帖子

为什么java握手期间java不发送客户端证书?

我正在尝试连接到安全的Web服务.

即使我的密钥库和信任库已正确设置,我也会收到握手失败.

经过几天的挫折,无休止的谷歌搜索并询问周围的每个人我发现唯一的问题是java选择不在握手期间将客户端证书发送到服务器.

特别:

  1. 服务器请求客户端证书(CN = RootCA) - 即"给我一个由根CA签名的证书"
  2. Java查看了密钥库,只发现了我的客户端证书,该证书由"SubCA"签署,而"SubCA"又由"RootCA"签发.它没有费心去查看信任库...呃好吧我猜
  3. 可悲的是,当我试图将"SubCA"证书添加到密钥库时,这根本没有帮助.我确实检查了证书是否被加载到密钥库中.他们这样做,但KeyManager忽略除客户端之外的所有证书.
  4. 所有上述情况导致java决定它没有任何满足服务器请求的证书并且什么都不发送... tadaaa握手失败:-(

我的问题:

  1. 我是否有可能以"破坏证书链"或某种方式将"SubCA"证书添加到密钥库中,以便KeyManager仅加载客户端证书并忽略其余证书?(Chrome和openssl设法解决这个问题,为什么不能使用java? - 请注意,"SubCA"证书总是作为受信任的权限单独提供,因此Chrome显然在握手期间正确地将其与客户端证书一起打包)
  2. 这是服务器端的正式"配置问题"吗?服务器是第三方.我希望服务器能够请求由"SubCA"授权机构签署的证书,因为这是他们为我们提供的.我怀疑这个在Chrome和openssl中工作的事实是因为它们"限制性较小"而java只是"按书"而且失败了.

我确实为此设置了一个肮脏的解决方法,但我对此并不高兴所以如果有人能为我澄清这个,我会很高兴.

java ssl https certificate ca

63
推荐指数
2
解决办法
7万
查看次数

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

我正在通过HTTPS连接到Web服务.我已经完成了我认为使其工作所需的所有内容,但最终我得到了握手失败.

我发现作为一个新用户,我不能发布超过2个链接,因为"垃圾邮件保护" - 比很多堆栈溢出...无论如何这里是一个链接到一个所有链接拼写的pastebin帖子...所以当我在这里写了"链接#1",它是对这些链接的引用:http://pastebin.com/y4zGNRC7

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

另一个奇怪的事情是,当我设置密钥库时我似乎得到了相同的行为,而当我没有设置密钥库时(唯一的区别是当我在控制台中打印密钥库内容时,但就是这样).

我试过谷歌搜索问题,我在stackoverflow上看到了很多类似的帖子,但没有任何帮助.我尝试更改协议版本("TLSv1","SSLv3",甚至是奇怪的v2 Hello).任何帮助将不胜感激 - 也许我可能忽略了一些基本的东西...我在这里绝望... Thanx

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

java ssl cxf exception handshake

10
推荐指数
1
解决办法
7万
查看次数

标签 统计

java ×2

ssl ×2

ca ×1

certificate ×1

cxf ×1

exception ×1

handshake ×1

https ×1