中级证书与Go

时间:2016-04-18 16:57:38

标签: ssl go ssl-certificate tls1.2

我正在尝试构建一个运行https应用程序的Go(golang)程序。

我真的遇到SSL中间证书问题,并且不知道问题出在哪里,是来自我的证书还是来自Go语言应用程序。

因此,我从SSL CA提供商处获得了两个证书文件:服务器证书和中间证书。

所以,我试图从我的go代码中加载这些证书:

tlsConfig := &tls.Config{}
tlsConfig.Certificates = make([]tls.Certificate, 2)
var err error
tlsConfig.Certificates[0], err = tls.LoadX509KeyPair(serverCertificate, privateKey)
if err != nil {
    log.Fatal(err)
}
tlsConfig.Certificates[1], err = tls.LoadX509KeyPair(intermeddiateCertificate, privateKey)
if err != nil {
    log.Fatal(err)
}
tlsConfig.BuildNameToCertificate()

server := &http.Server{
    ReadTimeout:    10 * time.Second,
    WriteTimeout:   10 * time.Second,
    MaxHeaderBytes: 1 << 20,
    TLSConfig:      tlsConfig,
    Addr:           ":443,
}

   app.RunServer(server)

此行第二次加载证书时代码失败

tls.LoadX509KeyPair(intermeddiateCertificate, privateKey)

错误是证书与私钥不匹配。

中间证书是否应与SSL / TLS世界中的私钥匹配?

或者它不必。 如果没有必要,那么如何在没有私钥的情况下加载证书?

我应该返回我的CA并告诉他们中级证书怎么不与私钥匹配?

1 个答案:

答案 0 :(得分:3)

您没有中间证书的密钥,仅用于服务器证书。请注意,我对Go不太了解,但根据Golang SSL TCP socket certificate configuration,您只需将中间证书包含在与服务器证书相同的PEM文件中。