我遇到了类似的问题,如下所述:
The Webserver I talk to updated its SSL cert and now my app can't talk to it
尽管具有有效的Verisign证书,但仍出现"PKIX路径构建失败“异常。
我不明白的是,为什么当我在web浏览器中点击相同的URL时,服务器工作得很好。
服务器正在发送整个证书链,我可以在我的web浏览器中看到它:
(Verisign root)
-> (VeriSign Class 3 Secure Server CA - G3)
-> (my server) 但是由于某些原因,Java和OpenSSL命令行工具没有看到它。
wget失败,openssl s_connect只能看到中间的"G3“证书。
然而IE和Chrome --没有问题。
这里发生了什么事?
发布于 2013-04-17 01:19:42
您在浏览器中看到的不一定是服务器发送的链,而是由浏览器重新构建的链。Windows有可能将G3中间CA作为信任锚,而其他客户端则没有。
要检查服务器发送的实际链,请结合使用-showcerts和s_connect
openssl s_client -showcerts -connect your.host.name:443确保以正确的顺序发送链:如果需要,首先发送服务器证书,然后发送中间证书。
Certificate chain
0 s:/.../CN=your.host.name
i:/.../CN=VeriSign Class 3 Secure Server CA - G3
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
1 s:/.../CN=VeriSign Class 3 Secure Server CA - G3
i:/.../CN=Verisign root
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----(以防万一,请检查您是否获得了正确的证书,以防您使用的是SNI,但使用的是不支持它的Java或OpenSSL版本。)
检查这一点的一个好工具是Qualys SSL labs test。
此外,根据wget或openssl的安装方式,它们通常没有受信任锚点的默认列表,因此您必须显式地为它们提供指向CA证书捆绑包的路径。
发布于 2013-04-16 23:56:40
Java和openssl似乎不信任G3
发布于 2013-04-17 00:19:05
这可能是因为根证书必须驻留在本地(客户端)才能被信任。如果有问题的verisign根证书在本地不受信任,那么它是否包含在服务器发送的链中并不重要-它不受客户端的信任。
https://stackoverflow.com/questions/16041602
复制相似问题