我有一个证书文件,该位置是:/usr/abc/my.crt
我希望将该证书用于我的tls配置,以便我的http客户端在与其他服务器通信时使用该证书。我目前的代码如下:
mTLSConfig := &tls.Config {
CipherSuites: []uint16 {
tls.TLS_RSA_WITH_RC4_128_SHA,
tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA,
tls.TLS_RSA_WITH_AES_128_CBC_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,
}
}
mTLSConfig.PreferServerCipherSuites = true
mTLSConfig.MinVersion = tls.VersionTLS10
mTLSConfig.MaxVersion = tls.VersionTLS10
tr := &http.Transport{
TLSClientConfig: mTLSConfig,
}
c := &http.Client{Transport: tr}
那么如何在我的TLS配置中分配证书?我看到http://golang.org/pkg/crypto/tls/#Config处的证书设置可以有人建议如何在那里配置我的证书位置吗?
mTLSConfig.Config{Certificates: []tls.Certificate{'/usr/abc/my.crt'}}
< - 错了,因为我正在传递string.right?我不会有任何其他文件,如.pem或.key等,只有这个my.cert。我是空白怎么办?
之前,我编辑过go源代码http://golang.org/src/pkg/crypto/x509/root_unix.go并在第i行后添加了/usr/abc/my.crt
。 12,它工作。但问题是我的证书文件位置可以更改,因此我在构建TLSConfig时从root_unix.go中删除了硬编码的行并尝试动态传递它。
答案 0 :(得分:15)
您可以通过在tls.Config。
中提供根CA池来替换系统CA集certs := x509.NewCertPool()
pemData, err := ioutil.ReadFile(pemPath)
if err != nil {
// do error
}
certs.AppendCertsFromPEM(pemData)
mTLSConfig.RootCAs = certs
如果您仍然想要系统的根,我认为您需要在initSystemRoots()
中重新创建功能。我没有看到任何公开的方法将证书合并到默认的系统根目录。