尽管有有效的威瑞信证书"PKIX path building failed"



我遇到了类似的问题,如下所述:

与我对话的web服务器更新了SSL证书,现在我的应用程序无法与它对话

"PKIX路径构建失败"异常,尽管拥有有效的Verisign证书。

我不明白的是为什么当我在web浏览器中点击相同的URL时服务器工作正常。

服务器正在发送整个证书链,我可以在web浏览器中看到它:

   (Verisign root)
     -> (VeriSign Class 3 Secure Server CA - G3) 
       -> (my server) 

但是由于某些原因,Java和OpenSSL命令行工具看不到它。

wget失败,openssl s_connect只看到中间的"G3"证书。

然而IE和Chrome -没有问题。

这是怎么回事?

您在浏览器中看到的不一定是服务器发送的链,而是浏览器重建的链。有可能Windows有G3中间CA作为可信任的锚,而其他客户端没有。

查看服务器发送的实际链,使用-showcertss_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实验室测试。

此外,根据wgetopenssl的安装方式,它们通常没有默认的受信任锚点列表,因此您必须显式地为它们提供一个到一组CA证书的路径。

似乎G3不被Javaopenssl信任

可能发生这种情况,因为根证书必须驻留在本地(在客户机上)才能被信任。如果有问题的verisign根证书在本地不受信任,那么它是否包含在服务器发送的链中并不重要—它不受客户端信任。

相关内容

最新更新