HTTPS-Anforderungsüberprüfung mithilfe von Zertifikaten in Go
In einer Anwendung, die eine Kommunikation mit einer HTTPS-fähigen REST-API erfordert, die an einem anderen Port bereitgestellt wird, ist es Es kommt häufig vor, dass bei der SSL-Validierung Fehler wie „x509: Zertifikat von unbekannter Stelle signiert“ auftreten. Dies tritt auf, wenn die Anwendung die Zertifizierungsstelle (CA) der API nicht erkennt.
Um dieses Problem zu beheben, müssen Sie das CA-Zertifikat zur Transportschicht Ihrer Anfrage hinzufügen. Hier ist ein Go-Codeausschnitt, der zeigt, wie es geht:
package main import ( "crypto/tls" "crypto/x509" "fmt" "io/ioutil" "log" "net/http" ) func main() { // Read the root CA certificate. caCert, err := ioutil.ReadFile("rootCA.crt") if err != nil { log.Fatal(err) } // Create a certificate pool from the CA certificate. caCertPool := x509.NewCertPool() caCertPool.AppendCertsFromPEM(caCert) // Configure the HTTP client with TLS settings. client := &http.Client{ Transport: &http.Transport{ TLSClientConfig: &tls.Config{ RootCAs: caCertPool, }, }, } // Make a GET request to the HTTPS URL. resp, err := client.Get("https://secure.domain.com") if err != nil { log.Fatal(err) } // Process the HTTP response as usual. fmt.Println(resp.Status) }
Wenn Sie keine Zertifizierungsstelle zum Signieren Ihrer Zertifikate erstellt haben, finden Sie hier einige Schritte als Leitfaden:
Generieren eine CA:
openssl genrsa -out rootCA.key 4096 openssl req -x509 -new -key rootCA.key -days 3650 -out rootCA.crt
Erstellen eines Zertifikats für Secure.domain.com Signed mit der CA:
openssl genrsa -out secure.domain.com.key 2048 openssl req -new -key secure.domain.com.key -out secure.domain.com.csr
Als Antwort auf die Frage „Common Name (z. B. Server-FQDN oder IHR Name) []:“ geben Sie „secure.domain.com“ (Ihren tatsächlichen Domainnamen) ein ).
openssl x509 -req -in secure.domain.com.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -days 365 -out secure.domain.com.crt
Das obige ist der detaillierte Inhalt vonWie verifiziert man HTTPS-Anfragen mithilfe von Zertifikaten in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!