Aller au contenu
ecdsa.com
OpenSSL 3CLI OpenSSL

Message d’erreur

error:05800074:x509 certificate routines::key values mismatch

Également affiché sous la forme

  • x509 certificate routines:ossl_x509_check_private_key:key values mismatch
  • [X509: KEY_VALUES_MISMATCH] key values mismatch
  • code: 'ERR_OSSL_X509_KEY_VALUES_MISMATCH'

nginx -t la signale sous la forme « [emerg] SSL_CTX_use_PrivateKey(\"<key file>\") failed (SSL: error:05800074:x509 certificate routines::key values mismatch) » ; la CLI openssl ajoute le nom de la fonction (« x509 certificate routines:ossl_x509_check_private_key:key values mismatch ») ; Python affiche « [X509: KEY_VALUES_MISMATCH] key values mismatch » ; Node.js définit le code ERR_OSSL_X509_KEY_VALUES_MISMATCH. OpenSSL 1.1.1 utilisait le code 0B080074.

OpenSSL 3 — X509_R_KEY_VALUES_MISMATCH when loading a certificate with a private key (nginx, Node.js, Python, openssl s_server)

Ce que cela signifie

Un serveur TLS (ou une bibliothèque) a reçu un certificat et une clé privée qui ne vont pas ensemble : la clé publique contenue dans le certificat n’est pas la moitié publique de la clé privée. OpenSSL refuse de charger la paire, si bien que le serveur ne démarre pas ou que le contexte ne peut pas être créé. Pris isolément, aucun des deux fichiers ne présente de défaut.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Comparer les clés publiques

    Calculez le condensat de la clé publique extraite du certificat et celui de la clé publique dérivée de la clé privée ; des condensats identiques signifient qu’elles vont ensemble. Cela fonctionne de la même manière pour les clés RSA, EC et Ed25519.

    bash
    # The two hashes must be identical
    openssl x509 -in server.pem -noout -pubkey | openssl sha256
    openssl pkey -in server.key -pubout | openssl sha256
  2. 2.

    Placer le certificat feuille en premier dans le bundle

    Listez les sujets du bundle ; le certificat feuille de votre nom d’hôte doit venir en premier, suivi des certificats intermédiaires.

    bash
    # Servers match the key against the FIRST certificate of the file: make it the leaf
    openssl crl2pkcs7 -nocrl -certfile fullchain.pem | openssl pkcs7 -print_certs -noout | grep subject=
    cat api.example.com.crt intermediate.crt > fullchain.pem
  3. 3.

    Trouver la clé correspondante parmi plusieurs

    Comparez le condensat de la clé publique du certificat avec celui de chaque clé candidate ; si aucune ne correspond, la clé a été perdue et le certificat doit être réémis avec une nouvelle clé.

    bash
    # Which of several keys belongs to the certificate?
    cert=$(openssl x509 -in server.pem -noout -pubkey | openssl sha256)
    for k in /etc/ssl/private/*.key; do
      [ "$(openssl pkey -in "$k" -pubout 2>/dev/null | openssl sha256)" = "$cert" ] && echo "match: $k"
    done

Erreurs associées

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