首頁 > 後端開發 > Golang > golang 安裝證書

golang 安裝證書

PHPz
發布: 2023-05-22 16:38:07
原創
980 人瀏覽過

在使用 Golang 進行 HTTPS 請求時,需要安裝 SSL 憑證。否則,會出現類似如下的錯誤:

x509: certificate signed by unknown authority
登入後複製

在 Golang 中,使用了標準庫中的 net/http 套件來進行 HTTP(S) 請求。而這個套件的預設行為是要驗證伺服器的憑證。如果伺服器的憑證不在 Golang 內建的可信任憑證清單中,Golang 就會報上述錯誤。

為了解決這個問題,我們需要安裝伺服器憑證。

1. 下載證書

使用 openssl 指令從遠端伺服器下載證書,如下:

openssl s_client -connect example.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > example.com.crt
登入後複製

其中,example.com 為需要下載憑證的網域名稱。這個指令會從 example.com 的 443 連接埠下載證書,並儲存為 example.com.crt 檔案。

2. 安裝憑證

將下載好的憑證加入Golang 的可信任證書清單中,有兩種​​方法:

2.1 方式一:新增至系統憑證庫

將憑證加入系統憑證庫中,讓Golang 自動辨識。

以Ubuntu 為例,將憑證複製到系統CA 儲存位置下:

sudo cp example.com.crt /usr/local/share/ca-certificates/
登入後複製

然後更新憑證:

sudo update-ca-certificates
登入後複製

2.2 方式二:手動新增憑證到Golang 內建憑證庫

將憑證新增至Golang 內建憑證庫的根憑證池中,可以透過以下方式實現。

package main
 
import (
    "crypto/tls"
    "crypto/x509"
    "io/ioutil"
    "fmt"
    "net/http"
)
 
func main() {
    // 从文件载入证书
    cert, err := ioutil.ReadFile("example.com.crt")
    if err != nil {
        fmt.Println(err)
        return
    }
 
    pool := x509.NewCertPool()
 
    // 将证书添加到根证书池中
    if ok := pool.AppendCertsFromPEM(cert); !ok {
        fmt.Println("Failed to parse root certificate")
        return
    }
 
    tr := &http.Transport{
        TLSClientConfig: &tls.Config{
            RootCAs: pool,
        },
    }
 
    client := &http.Client{Transport: tr}
 
    _, err = client.Get("https://example.com")
    if err != nil {
        fmt.Println(err)
        return
    }
 
    fmt.Println("Success")
}
登入後複製

該程式會載入 example.com.crt 檔案並將其新增至根憑證池中。然後使用這個憑證來造訪 example.com 網站。如果載入憑證成功,則會輸出 "Success"。

3. 驗證憑證是否安裝成功

執行下列程式碼:

package main
 
import (
    "crypto/tls"
    "fmt"
    "net/http"
)
 
func main() {
    resp, err := http.Get("https://example.com")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer resp.Body.Close()
    fmt.Println(resp.Status)
}
登入後複製

如果傳回狀態碼為 200,則表示憑證已經安裝成功。否則,可能還需要檢查證書或網路等其他問題。

以上就是在 Golang 中安裝 SSL 憑證的方法。在實際工作中,使用方式一較常見,因為一般都會有系統管理員負責維護系統憑證庫。而方式二則適用於一些特殊情況。

以上是golang 安裝證書的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板