一般来说,我从GoDaddy获得了3个文件:
通过以下方式在Go服务器中配置了所有这些文件:
cert, err := tls.LoadX509KeyPair("myalcoholist.pem","myalcoholist.key") if err != nil { log.Fatalf("server: loadkeys: %s", err) } pem, err := ioutil.ReadFile("cert/sf_bundle-g2-g1.crt") if err != nil { log.Fatalf("Failed to read client certificate authority: %v", err) } if !certpool.AppendCertsFromPEM(pem) { log.Fatalf("Can't parse client certificate authority") } tlsConfig := &tls.Config{ ClientCAs: certpool, Certificates: []tls.Certificate{cert}, } srv := &http.Server{ Addr: "myalcoholist.com:443", Handler: n, ReadTimeout: time.Duration(5) * time.Second, WriteTimeout: time.Duration(5) * time.Second, TLSConfig: tlsConfig, } err := srv.ListenAndServeTLS("cert/myalcoholist.pem","cert/myalcoholist.key")
网络服务器运行正常,当前发布在https://myalcoholist.com:443。
https://myalcoholist.com:443
我使用验证了我的SSL https://www.ssllabs.com/ssltest/analyze.html?d=myalcoholist.com,它的响应是This server's certificate chain is incomplete. Grade capped to B.
https://www.ssllabs.com/ssltest/analyze.html?d=myalcoholist.com
This server's certificate chain is incomplete. Grade capped to B.
您可以转到此链接查看所有详细结果。
我想念什么?
在该线程之后,并从net/http/#ListenAndServeTLS()doc中开始:
net/http/#ListenAndServeTLS()
如果证书是由证书颁发机构签名的,则certFile应该是服务器证书,任何中间件和CA证书的串联。
尝试确保您也cert/myalcoholist.pem包括CA证书。
cert/myalcoholist.pem
该线程使用了:
myTLSConfig := &tls.Config{ CipherSuites: []uint16{ tls.TLS_RSA_WITH_RC4_128_SHA, tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA, tls.TLS_RSA_WITH_AES_128_CBC_SHA, tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA},} myTLSConfig.PreferServerCipherSuites = true const myWebServerListenAddress = "0.0.0.0:5555" myTLSWebServer := &http.Server{Addr: myWebServerListenAddress, TLSConfig: myTLSConfig, Handler: router} if err = myTLSWebServer.ListenAndServeTLS("/home/loongson/webServerKeysV2/golangCertFile2", "/home/loongson/webServerKeysV2/adequatech.ca-comodoinstantssl-exported-privatekey-rsa-ForApache.key"); err != nil { panic(err) }
与我之前的答案相比,添加密码套件是一个好主意,但是再次尝试查看传递给ListenAndServeTLS它的证书文件是否包含CA的效果更好。
ListenAndServeTLS
果然,https://www.ssllabs.com/ssltest/analyze.html?d = myalcoholist.com报告等级为A,警告:“链条问题:包含锚点”。 请参阅“ SSL / TLS:如何解决“链接问题:包含锚点” ”以删除该警告,但这不是错误:
RFC 2119:允许服务器在链中包含或拒绝根证书(也称为“信任锚”)。一些服务器包括它