SSL: erreur: 0B080074: routines de certificat x509: X509_check_private_key: non-concordance des valeurs de clé

99

Je ne parviens pas à configurer SSL. J'ai cherché sur Google et trouvé quelques solutions, mais aucune n'a fonctionné pour moi. J'ai besoin d'aide s'il vous plait...

Voici l'erreur que j'obtiens lorsque j'essaye de redémarrer nginx:

root@s17925268:~# service nginx restart
Restarting nginx: nginx: [emerg] SSL_CTX_use_PrivateKey_file("/etc/nginx/conf.d/ssl/ssl.key") failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
nginx: configuration file /etc/nginx/nginx.conf test failed

Mon certificat est de StartSSL et est valable 1 an.

Voici ce que j'ai testé:

  • Le certificat et la clé privée n'ont pas d'espaces de fin.
  • Je n'utilise pas le fichier server.key par défaut.
  • J'ai vérifié le nginx.conf et les directives pointent vers la clé privée et le certificat corrects.

J'ai également vérifié le module, et j'obtiens un module différent pour la clé et le certificat.

Merci de votre aide. :)

Galou
la source

Réponses:

36

J'ai un hachage MD5 avec des résultats différents pour la clé et le certificat.

Cela dit tout. Vous avez une incompatibilité entre votre clé et votre certificat.

Le module doit correspondre. Assurez-vous que vous avez la bonne clé.

dev0z
la source
Sauf si je manque quelque chose, vous VOULEZ absolument que les clés publiques et privées (le fichier de certificat et le fichier de clé) soient différentes.
Mark Berry
1
Les modulus' and the parties de l'exposant public dans la clé et le certificat doivent correspondre. Nul doute que les fichiers sont différents. La clé est générée pour un certificat particulier.
dev0z
Ma faute. Je pensais qu'il faisait référence au MD5 des fichiers. Je vois maintenant que les certificats ont une fonction de module distincte: Comment confirmer que le module de votre clé privée correspond au module de la clé publique de votre certificat SSL / TLS avant l'installation? .
Mark Berry
165

Une fois que vous avez établi qu'ils ne correspondent pas, vous avez toujours un problème - que faire. Souvent, le certificat peut simplement être assemblé de manière incorrecte. Lorsqu'une autorité de certification signe votre certificat, elle vous envoie un bloc qui ressemble à quelque chose comme

-----BEGIN CERTIFICATE-----
MIIAA-and-a-buncha-nonsense-that-is-your-certificate
-and-a-buncha-nonsense-that-is-your-certificate-and-
a-buncha-nonsense-that-is-your-certificate-and-a-bun
cha-nonsense-that-is-your-certificate-and-a-buncha-n
onsense-that-is-your-certificate-AA+
-----END CERTIFICATE-----

ils vous enverront également un ensemble (souvent deux certificats) représentant leur autorité pour vous accorder un certificat. cela ressemblera à quelque chose comme

-----BEGIN CERTIFICATE-----
MIICC-this-is-the-certificate-that-signed-your-request
-this-is-the-certificate-that-signed-your-request-this
-is-the-certificate-that-signed-your-request-this-is-t
he-certificate-that-signed-your-request-this-is-the-ce
rtificate-that-signed-your-request-A
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICC-this-is-the-certificate-that-signed-for-that-one
-this-is-the-certificate-that-signed-for-that-one-this
-is-the-certificate-that-signed-for-that-one-this-is-t
he-certificate-that-signed-for-that-one-this-is-the-ce
rtificate-that-signed-for-that-one-this-is-the-certifi
cate-that-signed-for-that-one-AA
-----END CERTIFICATE-----

sauf que malheureusement, ils ne seront pas aussi clairement étiquetés.

une pratique courante consiste donc à regrouper tous ces éléments dans un seul fichier - votre certificat, puis les certificats de signature. Mais comme ils ne sont pas faciles à distinguer, il arrive parfois que quelqu'un les place accidentellement dans l'autre ordre - signature des certificats, puis certificat final - sans s'en apercevoir. Dans ce cas, votre certificat ne correspondra pas à votre clé.

Vous pouvez tester pour voir ce que le certificat pense qu'il représente en exécutant

openssl x509 -noout -text -in yourcert.cert

En haut, vous devriez voir "Objet:", puis des éléments qui ressemblent à vos données. Si à la place cela ressemble à votre CA, votre bundle est probablement dans le mauvais ordre; vous pouvez essayer de faire une sauvegarde, puis déplacer le dernier certificat au début, en espérant que ce soit celui qui est votre certificat.

Si cela ne fonctionne pas, vous devrez peut-être simplement réémettre le certificat. Lorsque je crée un CSR, j'aime identifier clairement à quel serveur il est destiné (au lieu de simplement ssl.key ou server.key) et en faire une copie avec la date dans le nom, comme mydomain.20150306.key etc. de cette façon il est peu probable que les paires de clés privées et publiques soient mélangées avec un autre ensemble.

Vynce
la source
1
Cela a résolu le problème pour moi sur Nginx!
TTT du
24
Énorme +1 pour montrer comment voir ce qu'il y a dans la chaîne de certificats.
cbednarski
Vraiment utile, je passe une heure à essayer de comprendre pourquoi nginx refusait le certificat alors que je pouvais voir qu'il contenait les données
Jacopofar
3
Ok, cela a également fonctionné pour moi avec un certificat Comodo et Ngix. Je viens de pousser le dernier bloc de certificat vers le haut. Merci pour l'explication détaillée et un aperçu de ce problème.
Andy D
1
Cela m'aide! Réponse très utile! Merci beaucoup!
Oleg Klimenko
70
  1. Assurez-vous que votre certificat et votre clé sont au format PEM. Sinon, convertissez-les en utilisant la commande openssl
  2. Vérifiez un hachage MD5 de la clé publique pour vous assurer qu'il correspond à ce qui se trouve dans une clé privée

    openssl x509 -noout -modulus -in certificate.crt | openssl md5
    openssl rsa -noout -modulus -in privateKey.key | openssl md5
    
dev0z
la source
7
Bon conseil ! Eh bien, obtenez toujours la même erreur même si le hachage md5 est le même pour moi ^^
Delphine
4
Merci d'avoir indiqué comment vérifier les hachages. J'ai découvert que j'avais une erreur de copier-coller et qu'il manquait un seul tiret depuis le début de mon pem. Vous venez de m'éviter beaucoup de maux de tête. À votre santé.
Justin Fortier
38

J'ai eu ce problème parce que j'ajoutais le paquet et le certificat dans le mauvais ordre, donc peut-être que cela pourrait aider quelqu'un d'autre.

Avant (ce qui est faux):

cat ca_bundle.crt certificate.crt > bundle_chained.crt

Après (ce qui est juste)

cat certificate.crt ca_bundle.crt > bundle_chained.crt

Et n'oubliez pas de mettre à jour la configuration appropriée (ssl_certificate doit maintenant pointer vers le crt chaîné) comme

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     bundle_chained.crt;
    ssl_certificate_key www.example.com.key;
    ...
}

Depuis la page de manuel nginx :

Si le certificat de serveur et le bundle ont été concaténés dans le mauvais ordre, nginx ne démarrera pas et affichera le message d'erreur:

SSL_CTX_use_PrivateKey_file(" ... /www.example.com.key") failed
   (SSL: error:0B080074:x509 certificate routines:
    X509_check_private_key:key values mismatch)
Mandeep Gill
la source
3
C'est en fait une meilleure réponse à cette question que celle acceptée.
baldrs
9

Si cela se produit et que vous utilisez Let's Encrypt / certbot, la raison est probablement que vous avez utilisé à la chain.pemplace de fullchain.pem.

Cela devrait être quelque chose comme ceci:

ssl_certificate /etc/certbot/live/example.com/fullchain.pem;
ssl_certificate_key /etc/certbot/live/example.com/privkey.pem;

Consultez la documentation certbot "Où sont mes certificats?"

Marian
la source
Ou l'ordre des certificats dans le bundle est incorrect: d'abord letsencrypt, puis le propre cert.
ingopingo
5

J'ai eu le même problème et je l'ai finalement résolu en modifiant l'ordre des blocs pem dans le fichier de certificat.

Le bloc cert doit être placé au début du fichier, puis les blocs intermédiaires, puis le bloc racine.

J'ai réalisé ce problème en comparant un fichier de certificat problématique avec un fichier de certificat fonctionnel.

Fuweichin
la source
1

Mes 5 cents sur la question:

J'ai eu le même problème. Après environ 1 heure de travail, j'ai constaté que j'avais mal collé le certificat.

Si vous rencontrez une erreur comme celle-ci, veuillez vérifier votre certificat.

pseudo
la source
1

Dans mon cas, j'ai voulu changer le certificat SSL, car j'ai changé de serveur et j'ai donc dû créer un nouveau CSR avec cette commande:

 openssl req -new -newkey rsa:2048 -nodes -keyout mysite.key -out mysite.csr

J'ai envoyé le fichier mysite.csr au fournisseur SSL de la société et après avoir reçu le certificat crt, puis j'ai redémarré nginx, et j'ai cette erreur

 (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)

Après de nombreuses recherches, l'erreur était que le module du fichier de clé n'était pas le même que celui du fichier crt

Donc, pour le faire fonctionner, j'ai créé un nouveau fichier csr mais je dois changer le nom du fichier avec cette commande

 openssl req -new -newkey rsa:2048 -nodes -keyout mysite_new.key -out mysite_new.csr

Ensuite, j'avais reçu un nouveau fichier crt du fournisseur de la société, redémarrer nginx et cela a fonctionné.

poisson au citron
la source
0

Cela peut également se produire lorsque votre autorité de certification émet un certificat intermédiaire

J'ai rencontré ce problème (deux fois) avec nginx et aucune des solutions de cet article n'a expliqué le problème. Le billet de blog ici par un gentil homme nommé Marco l'a cloué, et je le colle ici pour tous ceux qui rencontrent également ce que je voyais. https://medium.com/@mrkdsgn/steps-to-install-a-go-daddy-ssl-certificate-on-nginx-on-ubuntu-14-04-ff942b9fd7ff

Dans mon cas, go-daddy était l'autorité de certification et cela est spécifique à la façon dont ils émettent le cert et les bundles de cert intermédiaires.

Voici l'extrait du billet de blog de Marco

Avec Nginx, si votre autorité de certification a inclus un certificat intermédiaire, vous devez créer un fichier de certificat chaîné unique contenant votre certificat et les certificats intermédiaires de l'autorité de certification.

Vous pouvez utiliser cette commande pour créer un fichier combiné appelé example.com.chained.crt:

cat example.com.crt intermediate.crt > example.com.chained.crt

Shyam Habarakada
la source
0

Im mon cas, le problème était que je cretead sertificates sans entrer de données dans l'interface cli. Quand j'ai régénéré des crétificats et parcouru tous les domaines: ville, état, etc., tout allait bien.

 sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
Viktor Kruglikov
la source
0

Cela m'est arrivé lorsque j'ai combiné le bundle.crt et le cert principal. La raison en était que j'ai copié le certificat principal sous le bundle.crt. Il devrait être l'inverse

1 / certificat principal 2 / bundle.crt

Krishna
la source
0

Pour Nginx:

  1. openssl req -newkey rsa:2048 -nodes -keyout domain.com.key -out domain.com.csr

  2. Fichier domain_com.crtet domain_com.ca-bundlefichiers SSL , puis copiez le nouveau fichier en pâte domain.com.chained.crt.

3: Ajouter des fichiers nginx:

  1. ssl_certificate /home/user/domain_ssl/domain.com.chained.crt;
  2. ssl_certificate_key /home/user/domain_ssl/domain.com.key;

Lates redémarre Nginx.

électrocodeur
la source
0

SL_CTX_use_PrivateKey ("/ etc / nginx / ssl / file") a échoué (SSL: erreur: 0B080074: routines de certificat x509: X509_check_private_key: non-concordance des valeurs clés)

Cette erreur peut se produire lorsque la clé privée du certificat ( ssl_certificate_keypar exemple .keyou .pemfichier) ne correspond pas au fichier de certificat public ( ssl_certificate) dans votre configuration Nginx (archiver nginx.confou entrer sites-enabled/). Assurez-vous que les deux fichiers correspondent.

Consultez les journaux d'erreurs Nginx pour plus de détails (par exemple /var/log/nginx/error.log).

Kenorb
la source
0

Dans mon cas, je dois concaténer les certificats de mon domaine.

cat myDomain.crt EntityCertCA.crt TrustedRoot.crt > bundle.crt

Et dans le fichier de configuration /etc/nginx/nginx.conf

 ssl_certificate "/etc/pki/nginx/bundle.crt";

Redémarrez le service et tout va bien.

systemctl restart nginx.service

Étape source 2: https://www.namecheap.com/support/knowledgebase/article.aspx/9781/2238/nginx-ssl-error0b080074x509-certificate-routines-x509checkprivatekeykey-values-mismatch

mariofertc
la source