Heim >Backend-Entwicklung >Golang >Wie stelle ich HTTPS-Anfragen mit selbstsignierten Zertifikaten in Go?

Wie stelle ich HTTPS-Anfragen mit selbstsignierten Zertifikaten in Go?

Susan Sarandon
Susan SarandonOriginal
2024-12-08 18:02:12300Durchsuche

How to Make HTTPS Requests with Self-Signed Certificates in Go?

So senden Sie eine HTTPS-Anfrage mit einem Zertifikat in Go

Das Senden von HTTPS-Anfragen an einen Server, der auf einem anderen Port läuft, kommt häufig vor auf zertifikatsbezogene Fehler stoßen. Dies liegt daran, dass das Serverzertifikat von einer unbekannten Autorität signiert ist und der Standard-HTTP-Client selbstsignierten Zertifikaten nicht vertraut.

Um dieses Problem zu beheben, müssen wir das Serverzertifikat manuell mithilfe des entsprechenden CA-Zertifikats überprüfen . Hier ist eine Schritt-für-Schritt-Anleitung, wie Sie dies in Go erreichen:

  1. Besorgen Sie sich das CA-Zertifikat:

    • Erwerben Sie das CA-Zertifikat (z. B. „rootCA.crt“), das zum Signieren des Servers verwendet wurde Zertifikat.
  2. Erstellen Sie einen Zertifikatspool:

    • Initialisieren Sie einen x509.CertPool und fügen Sie ihm das CA-Zertifikat hinzu caCertPool.AppendCertsFromPEM(caCert).
  3. TLS-Optionen konfigurieren:

    • Konfigurieren Sie eine tls.Config, um das Zertifikat zu verwenden Pool zur Überprüfung des Serverzertifikats.
    • Setzen Sie caCertPool auf RootCAs in der tls.Config.
  4. Erstellen Sie einen HTTP-Client mit benutzerdefiniertem Transport:

    • Erstellen Sie einen http.Client das einen benutzerdefinierten http.Transport verwendet, der mit den TLS-Optionen aus Schritt 3 konfiguriert wurde.
    • Setzen Sie TLSClientConfig für den Transport ein zur konfigurierten tls.Config.

Beispielcode:

package main

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

func main() {
    // Read the CA certificate from file
    caCert, err := ioutil.ReadFile("rootCA.crt")
    if err != nil {
        log.Fatal(err)
    }

    // Create a certificate pool and add the CA cert
    caCertPool := x509.NewCertPool()
    caCertPool.AppendCertsFromPEM(caCert)

    // Configure TLS options
    tlsConfig := &tls.Config{
        RootCAs: caCertPool,
    }

    // Create an HTTP client with custom transport
    client := &http.Client{
        Transport: &http.Transport{
            TLSClientConfig: tlsConfig,
        },
    }

    // Send an HTTPs request
    _, err = client.Get("https://secure.domain.com")
    if err != nil {
        panic(err)
    }
}

Hinweis:

Wenn Sie kein CA-Zertifikat haben, können Sie ein eigenes erstellen. Anweisungen zum Generieren selbstsignierter Zertifikate finden Sie in externen Ressourcen.

Das obige ist der detaillierte Inhalt vonWie stelle ich HTTPS-Anfragen mit selbstsignierten Zertifikaten in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn