golang SSL认证

时间:2014-08-30 03:01:46

标签: ssl go

所以,在这里,我试图让一个套接字侦听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)   

1 个答案:

答案 0 :(得分:2)

我对自己并不熟悉,但是从http://golang.org/pkg/crypto/tls/的文档中看,它们与其他SSL堆栈类似:

  • rootCert不应包含在链中。根证书是用于在客户端的证书链上进行验证的实际信任锚,因此客户端必须已经知道并信任它。
  • RootCA是用于验证证书的可信证书。这些不会发送给对等方,而是在验证收到的证书时用作信任锚。因此,此设置与客户端验证服务器证书相关,也可能与客户端发送证书时的服务器端相关。
  • 相反,您要发送给对等方的所有证书都必须包含在Certificates中。也就是说,不仅是叶证书cert,还有链证书validationCerttrustCert。您必须按正确的顺序包含它们,以便它们构建一个链,然后客户端可以使用受信任的根证书完成。