Maison >développement back-end >Golang >Pourquoi ma connexion TLS échoue-t-elle avec un certificat auto-signé et comment puis-je y remédier ?
Dépannage des connexions TLS avec des certificats auto-signés
Problème : Établissement d'une connexion TLS à l'aide d'un serveur auto-signé le certificat échoue avec une erreur indiquant un certificat inconnu autorité.
Code pertinent :
Client :
CA_Pool := x509.NewCertPool() severCert, err := ioutil.ReadFile("./cert.pem") CA_Pool.AppendCertsFromPEM(severCert) config := tls.Config{RootCAs: CA_Pool}
Serveur :
cert, err := tls.LoadX509KeyPair("./cert.pem", "./key.pem") config := tls.Config{Certificates: []tls.Certificate{cert}}
Erreur Message :
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")
Cause première :
Le certificat auto-signé généré n'a pas l'indicateur IsCA défini, indiquant qu'il ne s'agit pas d'un certificat intermédiaire ou racine . Par conséquent, le pool d'autorités de certification du client n'est pas en mesure de vérifier que le certificat auto-signé est une autorité valide.
Solution :
Pour corriger ce problème, assurez-vous que l'indicateur IsCA est défini lors de la génération du certificat auto-signé à l’aide de x509.CreateCertificate. Le code correct pour la génération de certificat est le suivant :
certTemplate := &x509.Certificate{ IsCA: true, KeyUsage: x509.KeyUsageCertSign, // ... other certificate parameters }
En définissant IsCA:true, le certificat auto-signé peut correctement servir d'autorité de certification, permettant au client de vérifier son authenticité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!