2014-08-30 3 views
3

그래서 여기에 SSL 연결에서 소켓 수신을 시도하려고합니다. 그러나 핸드 셰이크를 할 수는 없습니다. 실행 중golang SSL 인증

sudo openssl s_client -CApath /etc/ssl/certs/ -connect localhost:8080 

첫 번째 인증서를 확인할 수 없습니다.

저는이 SSL에 대한 경험이 거의 없습니다. 누구든지 도와 줄 수 있습니까?

cert, err := tls.LoadX509KeyPair("positivessl.crt", "key.pem") 
    Error.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(validationCert)          
    certs.AppendCertsFromPEM(trustCert)           
    certs.AppendCertsFromPEM(rootCert)            

    sslConfig := tls.Config{RootCAs: certs,Certificates: []tls.Certificate{cert}} 
    sslConfig.Rand = rand.Reader                          

    listener, err := tls.Listen("tcp", service, &sslConfig) 
+0

's_client'가 아닌's_server'를 서버로 사용해야합니다. 's_client'를 클라이언트로 사용한다면,'sudo'에 대한 이유가 없습니다. – jww

답변

2

나는 자신을 이동에 익숙하지 해요,하지만 문서에서 http://golang.org/pkg/crypto/tls/에서 그들은 다른 SSL 스택에 유사 :

  • rootCert는 체인에 포함되어서는 안된다. 루트 인증서는 클라이언트의 인증서 체인에서 확인하는 데 사용되는 실제 신뢰 앵커이므로 클라이언트는 이미이를 알고 신뢰해야합니다.
  • RootCA은 인증서를 확인하는 데 사용되는 신뢰할 수있는 인증서입니다. 이들은 피어에게 보내지는 않지만 수신 된 인증서를 확인할 때 트러스트 앵커로 대신 사용됩니다. 따라서이 설정은 클라이언트 측에서 서버 인증서를 확인하고 클라이언트가 인증서를 보낼 때 서버 측과 관련이있을 수 있습니다.
  • 대신 피어에게 보내려는 모든 인증서는 Certificates에 포함되어야합니다. 즉, 리프 인증서 cert뿐만 아니라 체인 인증서 validationCerttrustCert도 있습니다. 클라이언트가 신뢰할 수있는 루트 인증서로 끝낼 수있는 체인을 만들 수 있도록 올바른 순서로 포함해야합니다.