GoLang使用http ssl GoDaddy的证书 - 此服务器的证书链不完整。

时间:2016-07-03 14:09:42

标签: ssl go https

一般来说,我从GoDaddy获得了3个文件:

  1. 主证书文件
  2. 服务器私钥
  3. 捆绑文件
  4. 以下列方式在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://www.ssllabs.com/ssltest/analyze.html?d=myalcoholist.com验证了我的SSL,其响应为This server's certificate chain is incomplete. Grade capped to B.

    您可以转到此链接查看所有详细结果。

    我错过了什么?

1 个答案:

答案 0 :(得分:6)

关注that thread,以及net/http/#ListenAndServeTLS() doc:

  

如果证书由证书颁发机构签名,则certFile应该是服务器证书,任何中间人和CA证书的串联。

尝试并确保您的cert/myalcoholist.pem也包含CA证书。

该线程使用:

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)

}

my previous answer相比,添加密码套件是一个好主意,但是,如果它包含CA,请尝试查看传递给ListenAndServeTLS的证书文件是否更有效。

果然,https://www.ssllabs.com/ssltest/analyze.html?d=myalcoholist.com报告A级,并发出警告:“连锁问题:包含锚”。
请参阅“SSL/TLS: How to fix “Chain issues: Contains anchor””删除该警告,但this is not an error though

  

RFC 2119:允许服务器在链中包含根证书(也称为“信任锚”),或省略它。有些服务器包含它