2017-07-18 127 views
1

我在尝试一些基本示例以向网络请求数据,但是对不同主机的所有请求都会导致SSL错误:x509: certificate signed by unknown authority注意:我不是在代理后面,没有任何形式的证书拦截正在发生,因为使用卷曲或浏览器没有问题。x509由未知权威机构签名的证书

我目前正在使用的代码样本是:

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

+0

此代码在Ubuntu Docker容器内运行良好 –

+0

我正在运行Arch Linux内核版本4.9.37-1-lts。代码在任何其他机器上工作正常,但不在此机器上。所有的 –

回答

2

根据你的错误,我假设你正在使用Linux?

您很可能必须在运行程序的计算机上安装ca-certificates。

在Ubuntu,你将执行这样的事情:

sudo apt-get install ca-certificates 
+0

首先,我对Arch Linux的,我已经安装了该CA证书: 'pacaur -Qsq CA-certificates'结果 'CA证书 CA证书,CACERT CA-证书─ mozilla ca-certificates-utils ' –

相关问题