gpt4 book ai didi

linux - 如何在 Linux 上使用 Go 指定自定义 SSL 根目录

转载 作者:IT王子 更新时间:2023-10-29 01:48:06 26 4
gpt4 key购买 nike

假设我正在使用我不想修改的第三方网络库。它使用标准的 http.Request 接口(interface)来发出一些 HTTPS 请求。

我在没有安装证书根的嵌入式 Linux 实例上运行它,我可以访问的唯一目录是 /data。这意味着您收到错误:

Get https://example.com/: x509: failed to load system roots and no roots provided

有没有办法真正提供根?据我所知Go looks in these directories for X509 certificate roots ( see also ):

var certFiles = []string{
"/etc/ssl/certs/ca-certificates.crt", // Debian/Ubuntu/Gentoo etc.
"/etc/pki/tls/certs/ca-bundle.crt", // Fedora/RHEL
"/etc/ssl/ca-bundle.pem", // OpenSUSE
"/etc/pki/tls/cacert.pem", // OpenELEC
}
var certDirectories = []string{
"/system/etc/security/cacerts", // Android
}

正如我所说,我无权访问这些,以及 root pool seems to be private所以你不能附加到它:

var (
once sync.Once
systemRoots *CertPool
)
func systemRootsPool() *CertPool {
once.Do(initSystemRoots)
return systemRoots
}

这对 Go 来说是不可能的吗?

最佳答案

这样的事情似乎可行(我实际上只需要一个证书链,您可以通过单击 SSL 锁定图标、更多信息、查看证书、详细信息、导出、将类型更改为“X509 证书与链(PEM)”。

func initCerts() error {
certs := x509.NewCertPool()
pemData, err := ioutil.ReadFile("api.example.crt")
if err != nil {
return err
}
certs.AppendCertsFromPEM(pemData)

newTlsConfig := &tls.Config{}
newTlsConfig.RootCAs = certs

defaultTransport := http.DefaultTransport.(*http.Transport)
defaultTransport.TLSClientConfig = newTlsConfig
return nil
}

我不确定,但文档建议您必须在使用任何 TLS 函数之前执行此操作,因此我将其放在 main() 的开头。

关于linux - 如何在 Linux 上使用 Go 指定自定义 SSL 根目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32631289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com