Golang:如何在HTTP客户端的TLS配置中指定证书

我有一个证书文件,该位置是:/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。对吗?我没有任何其他文件,例如.pem或.key等,仅此my.cert。我是空白怎么办?

之前,我已经编辑了go源代码http://golang.org/src/pkg/crypto/x509/root_unix.go,

/usr/abc/my.crt在行号之后添加了该代码。12,它起作用了。但是问题是我的证书文件位置可以更改,因此在构建TLSConfig时,我已从root_unix.go中删除了硬编码行,并尝试动态传递它。

回答:

您可以通过在tls.Config中提供根CA池来替换系统CA集。

certs := x509.NewCertPool()

pemData, err := ioutil.ReadFile(pemPath)

if err != nil {

// do error

}

certs.AppendCertsFromPEM(pemData)

mTLSConfig.RootCAs = certs

但是,如果您仍然想要系统的根源,我认为您需要在中重新创建功能initSystemRoots()。我看不到任何将证书合并到默认系统根目录中的公开方法。

以上是 Golang:如何在HTTP客户端的TLS配置中指定证书 的全部内容, 来源链接: utcz.com/qa/425037.html

回到顶部