Aller au contenu
ecdsa.com
OpenSSL CLI (openssl s_client)CLI OpenSSL

Message d’erreur

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

Également affiché sous la forme

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

Affichée par openssl s_client sous la forme « verify error:num=21:… » et « Verify return code: 21 (…) ». Node.js signale la même situation sous le nom UNABLE_TO_VERIFY_LEAF_SIGNATURE (« unable to verify the first certificate »).

OpenSSL CLI (openssl s_client) — X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE

Ce que cela signifie

Erreur OpenSSL 21 (X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE) : la chaîne se compose d’un seul certificat, celui du serveur, et son émetteur est introuvable, si bien que même la signature du certificat feuille ne peut pas être vérifiée. s_client affiche généralement l’erreur 20 pour la profondeur 0 juste avant. Le remède se trouve presque toujours sur le serveur : il doit envoyer son certificat intermédiaire.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Vérifier ce qu’envoie le serveur

    Un seul certificat dont l’émetteur (i:) est une AC intermédiaire confirme le problème.

    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.

    Servir le certificat feuille + les intermédiaires

    Concaténez dans l’ordre le certificat feuille et le ou les certificats intermédiaires émetteurs, puis configurez le serveur avec ce fichier ; affichez le bundle pour vérifier l’ordre.

    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.

    Trouver le bon certificat intermédiaire

    L’extension Authority Information Access du certificat feuille indique l’URL du certificat de son émetteur ; téléchargez-le, convertissez-le en PEM si nécessaire, puis ajoutez-le au fichier de chaîne.

    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

Erreurs associées

Parcourir toute la base de données des erreurs de signature