web-dev-qa-db-fra.com

SSL: erreur: 0B080074: routines de certificat x509: X509_check_private_key: incompatibilité des valeurs de clé

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

Voici l'erreur que je reçois lorsque je tente 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 provient de StartSSL et est valable 1 an.

Voici ce que j'ai testé:

  • Le certificat et la clé privée ne comportent aucun espace de fin.
  • Je n'utilise pas le fichier server.key par défaut.
  • J'ai vérifié le nginx.conf et les directives Pointant 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. :)

69
Galou

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

Cela dit tout. Vous avez un décalage entre votre clé et votre certificat.

Le module devrait correspondre. Assurez-vous d'avoir la bonne clé.

29
dev0z

Une fois que vous avez établi qu’elles ne correspondent pas, vous avez toujours un problème: que faire? Souvent, le certificat peut simplement être assemblé de manière incorrecte. Quand 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 paquet (souvent deux certificats) qui représente 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 mette accidentellement dans l'ordre inverse - signant des certificats, puis le certificat final - sans s'en rendre compte. Dans ce cas, votre certificat ne correspondra pas à votre clé. 

Vous pouvez tester pour voir ce que le cert pense représenter en lançant

openssl x509 -noout -text -in yourcert.cert

Près du haut, vous devriez voir "Subject:", puis des éléments qui ressemblent à vos données. Si au lieu de cela, cela ressemble à votre autorité de certification, votre lot est probablement dans le mauvais ordre; vous pouvez essayer de faire une sauvegarde, puis de déplacer le dernier certificat au début, en espérant qu'il s'agisse de celui qui est votre certificat.

Si cela ne fonctionne pas, il vous suffira peut-être de faire réémettre le certificat. Lorsque je fais une CSR, j'aime bien identifier le serveur auquel il est destiné (au lieu de ssl.key ou server.key) et en faire une copie avec la date dans le nom, comme par exemple mydomain.20150306.key, etc. il est peu probable que les paires de clés privées et publiques se mêlent à un autre ensemble. 

143
Vynce
  1. Assurez-vous que votre certificat et votre clé sont au format PEM. Sinon, convertissez-les à l'aide de 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

57
dev0z

J'ai eu ce problème parce que j'ajoutais bundle et certificat dans le mauvais ordre, alors cela pourrait peut-être 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 conf appropriée (ssl_certificate doit maintenant pointer sur le crt chaîné) en tant que

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 pourra pas démarrer et affichera le message d'erreur suivant:

SSL_CTX_use_PrivateKey_file(" ... /www.example.com.key") failed
   (SSL: error:0B080074:x509 certificate routines:
    X509_check_private_key:key values mismatch)
12
Mandeep Gill

Si cela se produit et que vous utilisez Let's Encrypt/certbot, il est fort probable que vous ayez utilisé chain.pem au lieu de fullchain.pem.

Cela devrait être quelque chose comme ça:

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

Voir certbot «Où sont mes certificats?»

8
Marian

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

Le bloc de certificats doit être placé au début du fichier, puis aux blocs intermédiaires, puis au bloc racine.

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

3
fuweichin

Mes 5 centimes 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 avez une erreur comme celle-ci, veuillez vérifier votre certificat.

1
Nick

Dans mon cas, je voulais changer le certificat SSL, parce que j’avais changé de serveur, 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 de 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: erreur: 0B080074: routines de certificat x509: X509_check_private_key: incompatibilité des valeurs de clé)

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

Donc, pour que cela fonctionne, j'ai créé un nouveau fichier csr mais j'ai changé le nom du fichier avec cette commande

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

Ensuite, j’ai reçu un nouveau fichier CRT du fournisseur de la société, redémarrez Nginx et cela a fonctionné. 

1
lemon fish

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

1/principal cert 2/bundle.crt

0
Krishna

Dans mon cas, le problème était que je créais des inscriptions sans entrer aucune donnée dans l'interface CLI. Quand j'ai régénéré les certificats et saisi tous les champs: Ville, État, etc., tout est devenu 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
0
Viktor Kruglikov

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 présentées dans ce message n'explique le problème. Le blog ici, écrit par un gentilhomme nommé Marco, l’a cloué, et je le colle ici pour tous ceux qui se heurtent é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 le CA et cela est spécifique à la façon dont ils délivrent le cert et les kits de cert intermédiaires.

Voici l'extrait du blog de Marco

Avec Nginx, si votre autorité de certification incluait 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

0
Shyam Habarakada

Pour Nginx;

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

2- Les fichiers SSL domain_com.crt et domain_com.ca-bundle copient le nouveau fichier dans coller domain.com.chained.crt

3- Ajouter des fichiers nginx: une. ssl_certificate /home/user/domain_ssl/domain.com.chained.crt; b. ssl_certificate_key /home/user/domain_ssl/domain.com.key;

Lates redémarre Nginx

0
electrocoder