Apabila menggunakan Golang untuk membuat permintaan HTTPS, anda perlu memasang sijil SSL. Jika tidak, ralat yang serupa dengan yang berikut akan berlaku:
x509: certificate signed by unknown authority
Di Golang, pakej net/http dalam perpustakaan standard digunakan untuk membuat permintaan HTTP(S). Tingkah laku lalai pakej ini adalah untuk mengesahkan sijil pelayan. Jika sijil pelayan tiada dalam senarai sijil dipercayai terbina dalam Golang, Golang akan melaporkan ralat di atas.
Untuk menyelesaikan masalah ini, kami perlu memasang sijil pelayan.
Gunakan arahan openssl untuk memuat turun sijil dari pelayan jauh, seperti berikut:
openssl s_client -connect example.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > example.com.crt
Di mana example.com ialah nama domain yang memerlukan untuk dimuat turun. Perintah ini akan memuat turun sijil daripada port 443 example.com dan menyimpannya sebagai fail example.com.crt.
Tambahkan sijil yang dimuat turun ke senarai sijil dipercayai Golang Terdapat dua kaedah:
sudo cp example.com.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
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") }
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) }
Atas ialah kandungan terperinci sijil pasang golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!