Golang 从哪里获取根 CA?

Zty*_*tyx 18 go

crypto/tls.Config.RootCAs 状态

// RootCAs defines the set of root certificate authorities
// that clients use when verifying server certificates.
// If RootCAs is nil, TLS uses the host's root CA set.
Run Code Online (Sandbox Code Playgroud)

在 Linux 上,“主机的根 CA 集”是从哪里获取的?我需要知道这一点才能全局添加另一个根 CA 来信任。

Zty*_*tyx 32

它搜索以下位置:https : //golang.org/src/crypto/x509/root_linux.go

摘抄

// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package x509

// Possible certificate files; stop after finding one.
var certFiles = []string{
    "/etc/ssl/certs/ca-certificates.crt",                // Debian/Ubuntu/Gentoo etc.
    "/etc/pki/tls/certs/ca-bundle.crt",                  // Fedora/RHEL 6
    "/etc/ssl/ca-bundle.pem",                            // OpenSUSE
    "/etc/pki/tls/cacert.pem",                           // OpenELEC
    "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem", // CentOS/RHEL 7
    "/etc/ssl/cert.pem",                                 // Alpine Linux
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,其他根密钥是从同一 .go 文件中定义的目录“certDirectories”中的文件读取的。具体来说,此列表包括“/etc/ssl/certs”和“/etc/pki/tls/certs”。`certFiles` 和 `certDirectories` 都可以用环境变量(分别是 `SSL_CERT_FILE` 和 `SSL_CERT_DIR`)覆盖。 (6认同)

Lin*_*uan 12

您还可以设置环境变量“SSL_CERT_FILE”以让 Golang 使用您的自定义证书文件。


Saa*_*lik 5

在 Golang 的最新版本中,除了上面提到的证书路径之外,Golang 还将搜索任何证书 PEM 的一组通用目录:

/etc/ssl/certs                 // SLES10/SLES11
/etc/pki/tls/certs             // Fedora/RHEL
/system/etc/security/cacerts   // Android
Run Code Online (Sandbox Code Playgroud)

Linux 操作系统的路径定义如下: https: //golang.org/src/crypto/x509/root_linux.go。实际的证书查找和添加发生在此处:https ://golang.org/src/crypto/x509/root_unix.go 。