Message d’erreur
verify error:num=26:unsuitable certificate purpose
Également affiché sous la forme
- Verify return code: 26 (unsuitable certificate purpose)
- error 26 at 0 depth lookup: unsuitable certificate purpose
s_client affiche « verify error:num=26:… » et « Verify return code: 26 (…) » ; openssl verify affiche « error 26 at <depth> depth lookup: unsuitable certificate purpose ». Go signale le même problème sous la forme « x509: certificate specifies an incompatible key usage ».
OpenSSL CLI (openssl s_client / openssl verify -purpose) — X509_V_ERR_INVALID_PURPOSE
Ce que cela signifie
Erreur OpenSSL 26 (X509_V_ERR_INVALID_PURPOSE) : la chaîne est par ailleurs valide, mais les extensions d’un certificat n’autorisent pas l’usage vérifié. s_client contrôle le certificat du serveur pour l’usage serveur TLS, si bien que la vérification échoue pour un certificat dont l’extendedKeyUsage ne mentionne que clientAuth (ou emailProtection) ; openssl verify contrôle l’usage que vous indiquez avec -purpose.
Pourquoi cela se produit
L’extendedKeyUsage ne contient pas serverAuth
fréquenteDes certificats issus de modèles d’authentification client ou S/MIME installés sur un serveur, ou un EKU rédigé à la main sans serverAuth.
Un certificat d’AC est utilisé comme certificat serveur
occasionnelleServir un certificat dont le keyUsage se limite à keyCertSign/cRLSign fait échouer les contrôles de l’usage serveur TLS.
L’EKU d’un certificat intermédiaire exclut cet usage
occasionnelleOpenSSL contrôle les usages en remontant la chaîne ; un certificat intermédiaire limité à d’autres usages rend ses certificats feuilles inadaptés aux serveurs TLS.
Comment corriger l’erreur
- 1.
Lire les extensions d’usage
Les extensions extendedKeyUsage, keyUsage et basicConstraints indiquent à quoi le certificat peut servir ; openssl verify -purpose contrôle un usage précis.
bash openssl x509 -in server.pem -noout -ext extendedKeyUsage,keyUsage,basicConstraints # Check against the purpose you need: sslserver, sslclient, smimesign, ... openssl verify -CAfile root.pem -purpose sslserver server.pem - 2.
Réémettre pour le bon usage
Un certificat de serveur TLS doit comporter serverAuth dans l’extendedKeyUsage (si l’extension est présente) et digitalSignature dans le keyUsage.
bash openssl req -new -key server.key -out server.csr -subj "/CN=api.example.com" \ -addext "subjectAltName=DNS:api.example.com" -addext "extendedKeyUsage=serverAuth"