违背了公认的答案,你并不需要一个定制信任管理器,你需要修复服务器配置!
使用错误安装的dynadot / alphassl证书连接到Apache服务器时,我遇到了同样的问题。我正在使用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
用于配置服务器的说明(和中间证书)通常由颁发证书的机构提供,例如:http : //www.alphassl.com/support/install-root-certificate.html
安装了由证书颁发者提供的中间证书之后,使用HttpsUrlConnection进行连接时,我现在没有任何错误。