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

我谈到的Web服务器更新了它的SSL证书,现在我的应用程序无法与之通信

尽管拥有有效的Verisign证书,“PKIX路径构建失败”例外。

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

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

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

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

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

然而IE和Chrome - 没问题。

这里发生了什么?

===============>>#1 票数:2 已采纳

您在浏览器中看到的不一定是服务器发送的链,而是浏览器重建的链。 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证书的路径。

===============>>#2 票数:0

似乎G3不被Javaopenssl认为是可信任的

===============>>#3 票数:0

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

  ask by wrschneider translate from so

未解决问题?本站智能推荐:

1回复

访问Gmail(或安全网站)而不会收到PKIX证书路径错误

通过Gmail发送电子邮件导致获得PKIX证书路径错误。 这同样适用于从Tomcat发送电子邮件。 解决问题后 ,我希望你发现这篇文章很有用。 这篇文章为您提供了对这些错误的逐步诊断。 第1步 :我尝试使用这篇文章和另一篇文章解决问题,但这对我没有帮助。 在大多数情况下,这就足
2回复

有效证书上的JDK 11 SSL错误(在以前的版本中工作)

以下代码在JDK 11中引发错误: 错误是: 它在任何以前的JDK中工作(我已经在7,8,9和10中测试过)。 证书似乎是有效的,因为它被浏览器识别或我在互联网上发现的大多数SSL测试。 我已经尝试禁用主机名验证,禁用cacerts,将DigiCert添加到cacer
1回复

SSLHandshakeException未找到Android HTTPS的证书路径的信任锚

我正在尝试建立与HTTPS站点的连接,并且我遇到了以下异常: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification pa
2回复

从文件导入证书时SSL握手失败

我正在创建HTTPS服务器并自己验证证书。 我有一个奇怪的错误。 当我生成证书并添加该密钥库时,我能够进行SSL握手。 keytool -genkey -keyalg rsa -alias mycert -keystore lig.keystore -storepass chan
3回复

显示Android证书

我有一个简短的问题:这个电话是什么意外回来的? 我知道它返回的第一个应用证书的应用程序,它是CERT.RSA在META-INF文件夹,但exately这是什么回报? 只是一个字节数组,它将整个证书表示为文件或其他字节数组? 我真的不太了解证书的结构和它们包含的数据,所以我真的没有任何
1回复

证书链验证

如何在Java或Open SSL中进行证书链验证? 我正在编写应用程序,在该应用程序中,用户放置错误的连锁顺序是非常常见的情况。 证书以* .pem格式导入。 我不在乎证书是否有效,只是证书输入顺序正确! 提前致谢 !
1回复

提取服务器证书

我需要帮助以获取适当的代码以获取服务器证书-有效和无效,由CA签名和自签名。 任何链接和参考将不胜感激。 我有一个UNIX命令,该命令可以提供所需的信息,但我希望使用Java获得相同的输出。 UNIX中的命令是这样的- 这将返回gmail上的(不知道加密)证书链。 我希望我的程序提供完全相同
1回复

将SSL证书转换或导入到Java密钥库

我有一个SSL证书,我正在尝试导入Java密钥库中,以便将某些旧应用程序切换为SSL。 我不熟悉Java。 我有.crt,.key和.ca捆绑文件,但不知道它们采用的格式。 com.cabundle: com.crt: com.key: 我已经尝试按照本指南进行
1回复

PHP SoapClient,带有Java自签名证书

我们需要连接的WS之一具有PHP中的示例代码。 它们是为我们的CSR签名的...因此,我们现在有了私钥和证书进行身份验证。 他们建议将私钥和签名证书都放在一个.pem文件中,并在PHP中放入这样的代码: 而且效果很好。 但是我们使用的是Java,这里没有PHP专家-所以我将
2回复

将密钥和SSL证书导入java密钥库

我有pem格式的证书文件和私钥文件。 是否可以使用Java代码将这些文件加载​​到Java密钥库中,使用JDK附带的默认库而不是第三方库。 当我尝试谷歌搜索时,我只能找到.der格式的文件,使用java代码导入java密钥库。 http://knowledge-oracle.blogs