如何未找到适用于Android SSL连接的信任锚?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (46)

我试图连接到运行godaddy 256bit SSL证书的IIS6框,并且出现错误:

java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

这是我如何连接:

HttpsURLConnection conn;              
conn = (HttpsURLConnection) (new URL(mURL)).openConnection();
conn.setConnectTimeout(20000);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
String tempString = toString(conn.getInputStream()); 
提问于
用户回答回答于

@Chrispix的解决方案很危险!信任所有证书允许任何人在中间人攻击中做一名男子!只要发送任何证书给客户,它会接受它!

此外,与自定义证书建立安全连接会更复杂一点,它会为您带来所需的ssl加密安全性,避免中间人攻击的危险!

用户回答回答于

相反,接受的答案,你并不需要一个定制信任管理器,你需要修复服务器配置!

当连接到Apache服务器并且安装dynadot / alphassl证书不正确时,我遇到了同样的问题。我正在使用HttpsUrlConnection(Java / Android)进行连接,

javax.net.ssl.SSLHandshakeException: 
  java.security.cert.CertPathValidatorException: 
    Trust anchor for certification path not found.

实际的问题是服务器配置错误 - 用http://www.digicert.com/help/或类似软件进行测试,它甚至会告诉你解决方案:

“该证书不被信任的机构(检查对Mozilla的根存储)签署的。如果你买了一个值得信赖的权威证书,你可能只需要安装一个或多个中间证书。请与您的证书提供商寻求帮助做这您服务器平台“。

你也可以使用openssl检查证书:

openssl s_client -debug -connect www.thedomaintocheck.com:443

你可能会看到:

Verify return code: 21 (unable to verify the first certificate)

并且在输出的前面:

depth=0 OU = Domain Control Validated, CN = www.thedomaintocheck.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 OU = Domain Control Validated, CN = www.thedomaintocheck.com
verify error:num=27:certificate not trusted
verify return:1
depth=0 OU = Domain Control Validated, CN = www.thedomaintocheck.com
verify error:num=21:unable to verify the first certificate`

证书链只包含1个元素:

Certificate chain
 0 s:/OU=Domain Control Validated/CN=www.thedomaintocheck.com
  i:/O=AlphaSSL/CN=AlphaSSL CA - G2

...但应引用链中的签名机构回到Android所信任的版本(Verisign,GlobalSign等):

Certificate chain
 0 s:/OU=Domain Control Validated/CN=www.thedomaintocheck.com
   i:/O=AlphaSSL/CN=AlphaSSL CA - G2
 1 s:/O=AlphaSSL/CN=AlphaSSL CA - G2
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
 2 s:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA

扫码关注云+社区