Rumah  >  Artikel  >  pembangunan bahagian belakang  >  sijil pasang golang

sijil pasang golang

PHPz
PHPzasal
2023-05-22 16:38:07931semak imbas

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.

1. Muat turun sijil

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.

2. Pasang sijil

Tambahkan sijil yang dimuat turun ke senarai sijil dipercayai Golang Terdapat dua kaedah:

2.1 Kaedah 1: Tambahkan pada Perpustakaan sijil sistem

Tambahkan sijil pada pustaka sijil sistem dan biarkan Golang mengenalinya secara automatik.

Ambil Ubuntu sebagai contoh, salin sijil ke lokasi storan CA sistem:

sudo cp example.com.crt /usr/local/share/ca-certificates/

Kemudian kemas kini sijil:

sudo update-ca-certificates

2.2 Kaedah 2: Tambah sijil secara manual ke Perpustakaan sijil terbina dalam Golang

Tambahkan sijil pada kumpulan sijil akar pustaka sijil terbina dalam Golang, yang boleh dicapai dengan cara berikut.

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")
}

Atur cara ini memuatkan fail example.com.crt dan menambahkannya pada kumpulan sijil akar. Sijil ini kemudiannya digunakan untuk mengakses tapak web example.com. Jika sijil berjaya dimuatkan, "Kejayaan" adalah output.

3. Sahkan sama ada sijil berjaya dipasang

Jalankan kod berikut:

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)
}

Jika kod status pemulangan ialah 200, ini bermakna sijil telah berjaya dipasang. Jika tidak, mungkin terdapat isu lain seperti sijil atau rangkaian yang perlu disemak.

Di atas ialah cara memasang sijil SSL di Golang. Dalam kerja sebenar, kaedah 1 adalah lebih biasa, kerana biasanya terdapat pentadbir sistem yang bertanggungjawab untuk mengekalkan pangkalan data sijil sistem. Kaedah kedua sesuai untuk beberapa situasi khas.

Atas ialah kandungan terperinci sijil pasang golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn