← 中文资源

简体中文版本

Go: x509: certificate signed by unknown authority

修复 Go TLS 错误 x509: certificate signed by unknown authority:信任私有 CA、修正 SNI,并避免一律使用 InsecureSkipVerify。

阅读英文原文

症状

HTTPS 调用返回 x509: certificate signed by unknown authority。它常在本机正常、在 CI 或容器中失败,指向的是信任库而非服务端。

诊断

检查服务端下发的证书链与客户端信任库:

openssl s_client -connect api.internal:443 -showcerts </dev/null
ls /etc/ssl/certs/ca-certificates.crt

若签发者是内部 CA,客户端就必须信任该 CA。

修复

在代码中信任指定的 CA,或将其装入系统信任库:

pool := x509.NewCertPool()
pem, _ := os.ReadFile("/etc/ssl/internal-ca.pem")
pool.AppendCertsFromPEM(pem)
client := &http.Client{Transport: &http.Transport{
    TLSClientConfig: &tls.Config{RootCAs: pool},
}}

在精简镜像中安装 ca-certificates 并加入该 PEM。

验证

在容器内重跑请求;TLS 握手成功、响应正常返回,且信任库中确实存在预期的 CA。