Zum Inhalt springen
ecdsa.com
OpenSSL CLI (openssl s_client)OpenSSL-CLI

Fehlermeldung

verify error:num=21:unable to verify the first certificate

Auch ausgegeben als

  • Verify return code: 21 (unable to verify the first certificate)

openssl s_client gibt den Fehler als „verify error:num=21:…“ und „Verify return code: 21 (…)“ aus. Node.js meldet denselben Zustand als UNABLE_TO_VERIFY_LEAF_SIGNATURE („unable to verify the first certificate“).

OpenSSL CLI (openssl s_client) — X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE

Was der Fehler bedeutet

OpenSSL-Fehler 21 (X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE): Die Kette besteht aus einem einzigen Zertifikat, dem eigenen des Servers, und dessen Aussteller wurde nicht gefunden, deshalb lässt sich nicht einmal die Signatur des Leaf-Zertifikats prüfen. s_client gibt direkt davor meist Fehler 20 für Tiefe 0 aus. Die Lösung liegt fast immer beim Server: Er muss sein Zwischenzertifikat senden.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Prüfen, was der Server sendet

    Ein einzelnes Zertifikat, dessen Aussteller (i:) eine Zwischen-CA ist, bestätigt das Problem.

    bash
    openssl s_client -connect api.example.com:443 -servername api.example.com -showcerts </dev/null 2>/dev/null \
      | grep -E '^ *[0-9]+ s:|^ *i:'
  2. 2.

    Leaf-Zertifikat und Zwischenzertifikate ausliefern

    Hänge das Leaf-Zertifikat und das oder die ausstellenden Zwischenzertifikate in der richtigen Reihenfolge aneinander und konfiguriere den Server mit dieser Datei; gib das Bundle aus, um die Reihenfolge zu prüfen.

    bash
    # Build the file the server should use: leaf, then intermediates (issuer of each previous one)
    cat server.pem intermediate.pem > fullchain.pem
    openssl crl2pkcs7 -nocrl -certfile fullchain.pem | openssl pkcs7 -print_certs -noout   # check the order
  3. 3.

    Richtiges Zwischenzertifikat finden

    Die Erweiterung Authority Information Access des Leaf-Zertifikats nennt die URL des Ausstellerzertifikats; lade es herunter, konvertiere es bei Bedarf in PEM und füge es der Kettendatei hinzu.

    bash
    # Where to download the missing intermediate: the leaf's Authority Information Access URL
    openssl x509 -in server.pem -noout -ext authorityInfoAccess
    curl -sS -o intermediate.der http://ca.example.com/issuing-ca.crt
    openssl x509 -inform der -in intermediate.der -out intermediate.pem

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen