Golang: как указать сертификат в конфигурации TLS для http-клиента
у меня есть файл сертификата, в этом месте: /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'}}
ранее я редактировал исходный код go http://golang.org/src/pkg/crypto/x509/root_unix.go и добавил /usr/abc/my.crt
после строки нет. 12 и это сработало. Но проблема в том, что мое местоположение файла сертификата может измениться, поэтому я удалил жестко закодированную строку из root_unix.идите и попробуйте передать его динамически, при построении TLSConfig.
1 ответов
вы можете заменить набор системных ЦС, предоставив корневой пул ЦС в tls.Конфиг.
certs := x509.NewCertPool()
pemData, err := ioutil.ReadFile(pemPath)
if err != nil {
// do error
}
certs.AppendCertsFromPEM(pemData)
mTLSConfig.RootCAs = certs
Если вы все еще хотите корни системы, однако, я думаю, вам нужно будет воссоздать функциональность в initSystemRoots()
. Я не вижу никакого открытого метода для объединения сертификата в системные корни по умолчанию.