所以,在这里,我试图让一个套接字侦听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 :(得分:2)
我对自己并不熟悉,但是从http://golang.org/pkg/crypto/tls/的文档中看,它们与其他SSL堆栈类似:
rootCert
不应包含在链中。根证书是用于在客户端的证书链上进行验证的实际信任锚,因此客户端必须已经知道并信任它。 RootCA
是用于验证证书的可信证书。这些不会发送给对等方,而是在验证收到的证书时用作信任锚。因此,此设置与客户端验证服务器证书相关,也可能与客户端发送证书时的服务器端相关。Certificates
中。也就是说,不仅是叶证书cert
,还有链证书validationCert
和trustCert
。您必须按正确的顺序包含它们,以便它们构建一个链,然后客户端可以使用受信任的根证书完成。