由未知机构签名的x509证书

6
我正在尝试一些基本示例来请求网络数据,但是对不同主机的所有请求都会导致SSL错误:x509:证书由未知机构签名注意:我没有在代理后面,并且没有任何形式的证书拦截发生,因为使用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包,问题得以解决。


3
您的代码在我的本地机器上运行得非常完美。您是在直接运行在机器上还是在任何容器内运行? - sadlil
这段代码在 Ubuntu 的 Docker 容器中运行良好。 - Scott Stensland
我正在运行Arch Linux内核版本4.9.37-1-lts。代码在其他任何机器上都可以正常工作,但在这台机器上却不能正常工作。 - Maico Timmerman
@MaicoTimmerman 你是怎么解决的?我也遇到了同样的问题。 - Mazzy
请查看我的最终编辑,我移动了证书并手动重新安装了ca-certificates-utils。 - Maico Timmerman
我正在使用 go-pingdom 包,并在 Docker alpine:3.8 上运行。我在 /etc/ssl/certs 下没有任何内容。我尝试安装 RUN apk add --no-cache --virtual ca-certificates-utils,但没有成功。 - Mazzy
1个回答

9

根据您的错误,我猜测您正在使用Linux操作系统?

很可能您需要在运行程序的机器上安装ca-certificates。

在Ubuntu上,您可以执行以下命令:

sudo apt-get install ca-certificates

首先,我正在使用Arch Linux,并已安装了ca-certificates: pacaur -Qsq ca-certificates 的结果为ca-certificates ca-certificates-cacert ca-certificates-mozilla ca-certificates-utils - Maico Timmerman
1
请使用 sudo apt-get install --reinstall ca-certificates 命令进行安装,因为该软件包几乎肯定已经被安装了。 - exussum
谢谢大家,"sudo apt-get install --reinstall ca-certificates" 在我的 Debian 10 上解决了问题! - MeerArtefakt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接