Android + 威瑞信 SSL 版本 1

标签 android exception ssl verisign

我有以下问题:我使用 Verisign SSL 证书并尝试从我的 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

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

最佳答案

我确实遇到了这个问题,昨天设法解决了。您是正确的,根证书未被接受,因为它是版本 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 Root Certificate download page并手动下载版本 1 证书的 .pem 文件,在我的例子中是 3 类公共(public)主要证书颁发机构。

下载证书文件后,我只是按照 Adding unknown CAs 上的 Android 开发人员指南进行操作。 .就这样,错误消失了。

关于Android + 威瑞信 SSL 版本 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9467932/

相关文章:

java - 将双值写入 TextView

android - 无法解析索引 0 处的属性

android - 在Android模拟器上使用录音机

android - 将 CheckBox 添加到列表行会丢失我的 onItemClick 事件吗?

c# - 在 .NET 中捕获 native 代码异常

apache - (98)地址已在使用:make_sock:无法绑定(bind)到地址 [::]:443

python - stdin 在 Python 错误中是什么意思?

java - 在处理异常时操作列表中的*所有*项目的通用方法

google-chrome - 如何在 chrome 中使用带有 HTTPS 的 BurpSuite 代理

java - JSSE 是否使用 PrivateKeyEntry 中的证书作为信任 anchor ?