2017-07-18 38 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 ' –

相關問題