Fehlermeldung
verify error:num=26:unsuitable certificate purpose
Auch ausgegeben als
- Verify return code: 26 (unsuitable certificate purpose)
- error 26 at 0 depth lookup: unsuitable certificate purpose
s_client gibt „verify error:num=26:…“ und „Verify return code: 26 (…)“ aus; openssl verify gibt „error 26 at <depth> depth lookup: unsuitable certificate purpose“ aus. Go meldet dasselbe Problem als „x509: certificate specifies an incompatible key usage“.
OpenSSL CLI (openssl s_client / openssl verify -purpose) — X509_V_ERR_INVALID_PURPOSE
Was der Fehler bedeutet
OpenSSL-Fehler 26 (X509_V_ERR_INVALID_PURPOSE): Die Kette ist ansonsten gültig, aber die Erweiterungen eines Zertifikats erlauben den geprüften Verwendungszweck nicht. s_client prüft das Serverzertifikat auf den Verwendungszweck TLS-Server, deshalb scheitert ein Zertifikat, dessen extendedKeyUsage nur clientAuth (oder emailProtection) enthält; openssl verify prüft den Zweck, den du mit -purpose angibst.
Warum der Fehler auftritt
Die extendedKeyUsage enthält kein serverAuth
häufigZertifikate aus Vorlagen für Client-Authentifizierung oder S/MIME, die auf einem Server installiert wurden, oder eine von Hand geschriebene EKU ohne serverAuth.
Ein CA-Zertifikat wird als Serverzertifikat verwendet
gelegentlichEin ausgeliefertes Zertifikat, dessen keyUsage auf keyCertSign/cRLSign beschränkt ist, besteht die Prüfungen für den Verwendungszweck TLS-Server nicht.
Die EKU eines Zwischenzertifikats schließt den Verwendungszweck aus
gelegentlichOpenSSL prüft Verwendungszwecke die Kette hinauf; ein Zwischenzertifikat, das auf andere Verwendungen beschränkt ist, macht seine Leaf-Zertifikate für TLS-Server ungeeignet.
So behebst du den Fehler
- 1.
Key-Usage-Erweiterungen lesen
extendedKeyUsage, keyUsage und basicConstraints zeigen, wofür das Zertifikat verwendet werden darf; openssl verify -purpose prüft einen bestimmten Verwendungszweck.
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.
Für den richtigen Verwendungszweck neu ausstellen
Ein TLS-Serverzertifikat braucht serverAuth in extendedKeyUsage (falls die Erweiterung vorhanden ist) und digitalSignature in 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"