【发布时间】:2017-12-23 06:20:54
【问题描述】:
我正在尝试一些基本示例来从 Web 请求数据,但是对不同主机的所有请求都会导致 SSL 错误:x509: certificate signed by unknown authority。 注意:我没有使用代理,也没有发生任何形式的证书拦截,因为使用 curl 或浏览器可以正常工作。
我目前正在使用的代码示例是:
package main
import (
"fmt"
"net/http"
"io/ioutil"
"os"
)
func main() {
response, err := http.Get("https://google.com")
if err != nil {
fmt.Printf("%s\n", err)
os.Exit(1)
} else {
defer response.Body.Close()
contents, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Printf("%s", err)
os.Exit(1)
}
fmt.Printf("%s\n", string(contents))
}
}
编辑:代码在 Arch linux 内核 4.9.37-1-lts 上运行。
编辑 2:显然 /etc/ssl/certs/ca-certificates.crt 与我系统上的版本存在差异,通过(重新)移动证书并手动重新安装 ca-certificates-utils 包,问题得到了解决。
【问题讨论】:
-
您的代码在我的本地机器上完美运行。您是直接在机器中运行还是在任何容器中运行?
-
这段代码在 Ubuntu docker 容器中运行良好
-
我正在运行 Arch Linux 内核版本 4.9.37-1-lts。代码在任何其他机器上都可以正常工作,但在这台机器上却不行。
-
@MaicoTimmerman 你是怎么解决的?我有同样的问题
-
请查看我的最终编辑,我移动了证书并手动重新安装了 ca-certificates-utils。