Fehlerbehebung bei TLS-Verbindungen mit selbstsignierten Zertifikaten
Problem: Aufbau einer TLS-Verbindung über einen selbstsignierten Server Das Zertifikat schlägt mit einem Fehler fehl, der auf ein unbekanntes Zertifikat hinweist Autorität.
Relevanter Code:
Client:
CA_Pool := x509.NewCertPool() severCert, err := ioutil.ReadFile("./cert.pem") CA_Pool.AppendCertsFromPEM(severCert) config := tls.Config{RootCAs: CA_Pool}
Server:
cert, err := tls.LoadX509KeyPair("./cert.pem", "./key.pem") config := tls.Config{Certificates: []tls.Certificate{cert}}
Fehler Nachricht:
client: dial: x509: certificate signed by unknown authority (possibly because of "x509: invalid signature: parent certificate cannot sign this kind of certificate" while trying to verify candidate authority certificate "serial:0")
Ursache:
Für das generierte selbstsignierte Zertifikat ist das IsCA-Flag nicht gesetzt, was darauf hinweist, dass es sich nicht um ein Zwischen- oder Stammzertifikat handelt . Folglich ist der CA-Pool des Clients nicht in der Lage, das selbstsignierte Zertifikat als gültige Autorität zu überprüfen.
Lösung:
Um dieses Problem zu beheben, stellen Sie sicher, dass das IsCA-Flag aktiviert ist Wird beim Generieren des selbstsignierten Zertifikats mit x509.CreateCertificate festgelegt. Der korrekte Code für die Zertifikatsgenerierung lautet wie folgt:
certTemplate := &x509.Certificate{ IsCA: true, KeyUsage: x509.KeyUsageCertSign, // ... other certificate parameters }
Durch die Einstellung von IsCA:true kann das selbstsignierte Zertifikat ordnungsgemäß als Zertifizierungsstelle fungieren, sodass der Client seine Authentizität überprüfen kann.
Das obige ist der detaillierte Inhalt vonWarum schlägt meine TLS-Verbindung mit einem selbstsignierten Zertifikat fehl und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!