这是我在Android应用上构建SSL套接字的代码片段。我有一个它试图连接的go服务器。我已经签署了证书,而不是自签名,但我仍然收到错误,
trust anchor for certification path not found. android
SSLSocketFactory f = (SSLSocketFactory) SSLSocketFactory.getDefault();
try {
SSLSocket socket = (SSLSocket) f.createSocket(ip, port);
socket.startHandshake();
所以,我无法弄清楚它是否是由于我的服务器不正确或Android应用程序。我已经在主要的Android网站上看到了这个错误,但它并没有真正帮助我。
这是go代码,可能会在某处发光[/ p>]
cert, err := tls.LoadX509KeyPair("mycert_com.crt", "key.pem")
checkError(err)
rootCert, err := ioutil.ReadFile("AddTrustExternalCARoot.crt")
checkError(err)
trustCert, err := ioutil.ReadFile("COMODORSAAddTrustCA.crt")
checkError(err)
validationCert, err := ioutil.ReadFile("COMODORSADomainValidationSecureServerCA.crt")
checkError(err)
certs := x509.NewCertPool()
certs.AppendCertsFromPEM(rootCert)
clientCerts := x509.NewCertPool()
clientCerts.AppendCertsFromPEM(trustCert)
clientCerts.AppendCertsFromPEM(validationCert)
sslConfig := tls.Config{RootCAs: certs, ClientCAs: clientCerts, Certificates: []tls.Certificate{cert}}
listener, err := tls.Listen("tcp", service, &sslConfig)
坚持了几个星期。
由于
答案 0 :(得分:0)
您的问题是糟糕的服务器,就像您尝试使用openssl s_client
时所看到的那样。
有关如何修复服务器的类似问题的答案,请参阅golang SSL certification。就像我说的那样:根据文档,您必须将中间证书放入Certificates
而不是RootCAs
或ClientCAs
。