当从我的安卓应用程序连接到web服务时,我得到了一个SSLPeerUnverifiedException:“无对等证书”,该应用程序托管在一个服务器上,由Thawte提供SSL证书。
请记住,当涉及到服务器端时,我已经不知所措了,但是我在这方面看到的许多解决方案都涉及到公然地信任任何证书。大多数解决方案都是从2010至2011年初开始的。
我有两个问题,特别是:
谢谢!
发布于 2012-03-07 00:08:35
对于任何想要找到答案的人来说:在花了大量时间浏览SO和上网之后,我发现可能有两个原因:
不正确地安装中间证书(这不是here)
真正帮助我解决问题的答案是SO用户在这个线程上的bdc:Apache HttpClient on Android producing CertPathValidatorException (IssuerName != SubjectName)。
简而言之,他建议通过运行openssl s_client -connect server.domain.com:443来检查链的顺序。使用承载API的服务器的域名在Mac终端上运行此命令表明,链排序是不正确的。
一旦订单被固定在服务器端,瞧!一切正常-好的!
发布于 2013-06-18 17:00:31
完全同意这里的Sid。请不要在android上添加任何虚假的klugey代码来绕过SSL异常。完全违背了SSL的目的。
对于通过https连接到android的tomcat服务器有问题的任何人:
确保您使用CA的根证书和中间证书进行链接。我没有生成用于GoDaddy (我们的CA )的创建CSR的私钥,所以在导入到密钥存储库之前,我必须将密钥和证书转换为pkcs12。注意-chain选项。这很重要。
openssl pkcs12 -export -out mykey.pks -inkey private_key.key -in domain.crt -CAfile ca_intermed_root_bundle.crt -chain -name alias_name -passout stdin(通过stdin输入密码)
现在,将mykey.pks导入到java密钥库中。
keytool -importkeystore -deststorepass changeit -destkeypass changeit -destkeystore mystore.keystore -srckeystore mykey.pks -srcstoretype PKCS12 -alias alias_name这个密钥存储库现在可以在tomcat 8443连接器中使用:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/path../mystore.keystore"
keystorePass="changeit" keyAlias="alias_name"
/>当我从安卓系统连接时,我重复了一遍SSLPeerUnverifiedExceptions,这完全修复了它。最后,请使用http://www.sslshopper.com/ssl-checker.html或任何其他工具进行验证,以检查证书链接是否正确。
https://stackoverflow.com/questions/9589760
复制相似问题