Message d’erreur
verify error:num=18:self-signed certificate
Également affiché sous la forme
- verify error:num=18:self signed certificate
- Verify return code: 18 (self-signed certificate)
- error 18 at 0 depth lookup: self-signed certificate
OpenSSL 3.x affiche « self-signed », 1.1.1 « self signed ». s_client affiche « verify error:num=18:… » et « Verify return code: 18 (…) » ; openssl verify affiche « error 18 at 0 depth lookup: … ».
OpenSSL CLI (openssl s_client / openssl verify) — X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
Ce que cela signifie
Erreur OpenSSL 18 (X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) : le certificat à la profondeur 0 est auto-signé (il est son propre émetteur) et ne figure pas dans le magasin de confiance. Aucune AC ne se trouve au-dessus de lui, si bien qu’aucun certificat intermédiaire ni aucun bundle ne peut aider ; le certificat doit être approuvé directement ou remplacé par un certificat émis par une AC.
Pourquoi cela se produit
Le serveur utilise un certificat auto-signé
fréquenteLes serveurs de développement, les équipements, les interfaces d’administration et les services fraîchement installés démarrent souvent avec un certificat généré.
Un certificat par défaut est servi pour un nom inconnu
occasionnelleLes proxys inverses et les ingress répondent avec un certificat auto-signé par défaut aux noms pour lesquels ils n’ont aucune configuration ; vérifiez le SNI et le routage.
openssl verify exécuté sur un certificat racine
occasionnelleExécuter openssl verify root.pem sans -CAfile root.pem signale l’erreur 18 pour toute racine auto-signée, même valide.
Comment corriger l’erreur
- 1.
Confirmer que le sujet et l’émetteur sont identiques
Si le sujet est égal à l’émetteur, le certificat est auto-signé ; c’est son empreinte que vous comparez à la valeur attendue.
bash echo | openssl s_client -connect api.example.com:443 -servername api.example.com 2>/dev/null \ | openssl x509 -noout -subject -issuer -fingerprint -sha256 # subject == issuer: self-signed - 2.
Approuver ce certificat précis pour les tests
Utiliser le certificat lui-même comme -CAfile amène OpenSSL à accepter exactement ce certificat. Confirmez d’abord l’empreinte par un canal de confiance.
bash # Trust this exact certificate for a check (after confirming the fingerprint out of band) echo | openssl s_client -connect api.example.com:443 -servername api.example.com 2>/dev/null | openssl x509 -out api.pem echo | openssl s_client -connect api.example.com:443 -servername api.example.com -CAfile api.pem 2>&1 | grep 'Verify return code' - 3.
Vérifier une racine par rapport à elle-même
Une racine auto-signée ne se vérifie que lorsqu’elle est l’ancre de confiance : passez-la comme -CAfile.
bash # Verifying a root CA certificate itself needs the root as its own trust anchor openssl verify -CAfile root.pem root.pem # root.pem: OK