0

我遇到了与此处所述类似的问题:

我与之交谈的网络服务器更新了它的 SSL 证书,现在我的应用程序无法与之交谈

尽管拥有有效的 Verisign 证书,但出现“PKIX 路径构建失败”异常。

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

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

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

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

wget失败,并且openssl s_connect只看到中间“G3”证书。

然而 IE 和 Chrome - 没问题。

这里发生了什么?

4

3 回答 3

2

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

要检查服务器发送的实际链,请使用-showcertswith 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 实验室测试

此外,根据安装方式wgetopenssl安装方式,它们通常没有受信任锚点的默认列表,因此您必须明确为它们提供指向 CA 证书包的路径。

于 2013-04-16T17:19:41.987 回答
0

似乎不被andG3认为是信任的Javaopenssl

于 2013-04-16T15:56:40.280 回答
0

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

于 2013-04-16T16:19:05.053 回答