2014-08-30 3 views
1

Вот фрагмент моего кода для просто построения SSL-сокета в моем приложении для Android. У меня есть сервер go, к которому он пытается подключиться. Я подписал сертификаты, а не сам подписанный, но я все еще получаю ошибку,Android, Golang и SSL

trust anchor for certification path not found. android

 SSLSocketFactory f = (SSLSocketFactory) SSLSocketFactory.getDefault(); 

     try { 
      SSLSocket socket = (SSLSocket) f.createSocket(ip, port); 
      socket.startHandshake(); 

Таким образом, я не могу понять, если это происходит из-за мой сервер не является правильным или андроид приложения. Я прочитал на главном сайте андроида об этой ошибке, но это не помогло мне.

Вот код идти, возможно, прольет некоторый свет где-то

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

Ваша проблема плохой сервер, как вы видите, когда вы пытаетесь с openssl s_client. См. golang SSL certification для ответа на аналогичный вопрос от вас о том, как исправить сервер. И, как я сказал там: согласно документации, вы должны поставить промежуточные сертификаты в Certificates, а не в RootCAs или ClientCAs.

Смежные вопросы