Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara meminta https dalam golang

Cara meminta https dalam golang

PHPz
PHPzasal
2023-04-23 10:05:431762semak imbas

Dengan populariti Internet dan pengembangan berterusan skop aplikasinya, data kami semakin memerlukan perlindungan keselamatan. Oleh itu, apabila membuat permintaan http, banyak laman web menggunakan protokol https untuk menghantar data. Jadi, bagaimana untuk melaksanakan permintaan ke laman web https di golang? Artikel ini akan memperkenalkan anda kepada pelaksanaan golang meminta https.

1. Apakah itu https

HTTPS (Hyper Text Transfer Protocol over Secure Socket Layer), yang menambah sokongan untuk protokol SSL (Secure Sockets Layer) berdasarkan HTTP, jadi ia adalah juga dipanggil HTTP melalui SSL. SSL menggunakan sijil untuk membuktikan identiti pihak yang satu lagi dan menyediakan keselamatan untuk komunikasi antara kedua-dua pihak.

2. Pelaksanaan permintaan https dalam golang

Dalam golang, anda boleh menggunakan kaedah yang disediakan dalam perpustakaan net/http untuk melaksanakan permintaan ke laman web https. Kami boleh melaksanakan permintaan https mudah melalui contoh berikut:

package main

import (
    "io/ioutil"
    "net/http"
    "fmt"
)

func main() {
    tr := &http.Transport{
        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    }

    client := &http.Client{Transport: tr}

    resp, err := client.Get("https://www.example.com")

    if err != nil {
        fmt.Println(err)
        return
    }

    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)

    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(string(body))
}

Dalam kod di atas, kami menggunakan kaedah Klien dalam pakej net/http untuk mencipta klien http. Perlu diingat bahawa apabila membuat permintaan https, kami perlu melakukan beberapa pemprosesan pada konfigurasi klien TLS.

3. Isu keselamatan dalam permintaan https

Walaupun permintaan https boleh dibuat melalui kaedah di atas, kami perlu ambil perhatian bahawa apabila meminta https, disebabkan penghantaran maklumat peribadi yang terlibat, Kami memerlukan untuk memastikan keselamatan dan kebolehpercayaan permintaan.

Dalam contoh kod di atas, kami melangkau proses pengesahan sijil dengan menetapkan atribut InsecureSkipVerify dalam konfigurasi klien TLS kepada benar, dengan itu memintas pengesahan identiti pelayan. Walaupun kaedah ini boleh mengelakkan masalah tidak dapat meminta laman web https kerana kegagalan pengesahan sijil, ia sangat berbahaya dari perspektif keselamatan. Oleh itu, kami mengesyorkan menggunakan kaedah yang disediakan dalam pustaka sijil terbina dalam golang untuk mengurus sijil dan mengesahkan keselamatan permintaan https melalui sijil. Berikut ialah contoh kod yang menggunakan sijil untuk mengesahkan identiti pelayan:

package main

import (
    "crypto/tls"
    "crypto/x509"
    "io/ioutil"
    "net/http"
    "fmt"
)

func main() {
    certPath := "cert.pem"
    keyPath := "key.pem"
    cert, err := tls.LoadX509KeyPair(certPath, keyPath)

    if err != nil {
        fmt.Println(err)
        return
    }

    certPool := x509.NewCertPool()

    caCertPath := "ca.crt"
    caCrt, err := ioutil.ReadFile(caCertPath)

    if err != nil {
        fmt.Println(err)
        return
    }

    certPool.AppendCertsFromPEM(caCrt)

    tr := &http.Transport{
        TLSClientConfig: &tls.Config{
            Certificates: []tls.Certificate{cert},
            RootCAs:      certPool,
        },
    }

    client := &http.Client{Transport: tr}

    resp, err := client.Get("https://www.example.com")

    if err != nil {
        fmt.Println(err)
        return
    }

    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)

    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(string(body))
}

Dalam kod di atas, kami memuatkan sijil melalui kaedah tls.LoadX509KeyPair, cipta kumpulan sijil melalui x509. kaedah NewCertPool dan tambah sijil CA ke dalam kumpulan sijil. Kami kemudian menggunakan sifat Sijil dalam tls.Config untuk menentukan sijil yang digunakan oleh pelanggan, dan sifat RootCAs untuk menentukan kumpulan sijil yang digunakan oleh pelanggan.

4. Ringkasan

Artikel ini memperkenalkan kaedah melaksanakan permintaan https dalam golang dan isu keselamatan yang perlu diberi perhatian. Walaupun kami boleh memudahkan permintaan https dengan melangkau pengesahan sijil, atas sebab keselamatan, kami mengesyorkan menggunakan sijil untuk mengesahkan identiti pelayan bagi memastikan keselamatan permintaan tersebut. Saya harap ia dapat membantu semua orang yang mempunyai masalah permintaan https yang dihadapi dalam pembangunan golang.

Atas ialah kandungan terperinci Cara meminta https dalam 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