1

我有以下问题:我使用 Verisign SSL Cert 并尝试从我的 android 应用程序连接到我的 tomcat 7 服务器。在我看来,证书安装正确,因为我可以成功地连接到 iphone、firefox 浏览器和 verisign 的 ssl-tool 和其他 ssl 检查工具的同一个应用程序。

但是android应用程序说:java.security.cert.CertificateException:java.security.cert.CertPathValidatorException: Version 1 certs can't be used as intermediate certificates

我尝试按照许多答案中的描述重新排序证书,并使用 and 实现了解决方案,EasySSLSocketFactoryEasyX509TrustManager我无法解决异常。版本 1 证书作为最后一个证书订购,所以我有[0]-my cert, [1]-intermediate1, [2]-intermediate2 and finally [3]-the root Version 1. 出于安全原因,我不想允许所有证书。我不确定为什么会引发此异常,但似乎威瑞信发出了错误的根证书,或者 android 没有在其信任库中实现根。这怎么可能解决?非常感谢您的帮助

4

2 回答 2

2

我有这个确切的问题,昨天设法解决了。您是正确的,因为它是版本 1 证书,因此不接受根证书。

我首先通过使用 openssl 找出证书链中的哪个证书是版本 1 证书(这会导致错误)来解决问题。

simonevertsson$ openssl s_client -connect my.secure.site.com:443

这给出了证书链。例子:

---
Certificate chain
 0 s:/C=SE/ST=Uppsala/L=Uppsala/O=Example AB/CN=my.secure.site.com
   i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3
 1 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3
   i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5
 2 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5
   i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 3 s:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
   i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
---

然后我去了VeriSign 根证书下载页面并手动下载了版本 1 证书的 .pem 文件,在我的例子中是第 3 类公共主要证书颁发机构。

下载证书文件后,我只是按照有关添加未知 CA的 Android 开发人员指南进行操作。就这样,错误消失了。

于 2015-01-21T15:39:09.390 回答
0

确保您在 web/app 服务器上只安装了一个证书。删除所有过期的证书。

于 2013-07-10T09:31:57.457 回答