SSL: Fehler: 0B080074: x509-Zertifikatroutinen: X509_check_private_key: Schlüsselwerte stimmen nicht überein

99

Ich kann SSL nicht einrichten. Ich habe gegoogelt und ein paar Lösungen gefunden, aber keine davon hat für mich funktioniert. Ich brauche bitte Hilfe ...

Hier ist der Fehler, den ich bekomme, wenn ich versuche, nginx neu zu starten:

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

Mein Zertifikat stammt von StartSSL und ist 1 Jahr gültig.

Folgendes habe ich getestet:

  • Das Zertifikat und der private Schlüssel haben keine nachgestellten Leerzeichen.
  • Ich verwende nicht die Standarddatei server.key.
  • Ich habe die Datei nginx.conf überprüft und die Anweisungen zeigen auf den richtigen privaten Schlüssel und das richtige Zertifikat.

Ich habe auch den Modul überprüft und erhalte einen anderen Modul für Schlüssel und Zertifikat.

Danke für Ihre Hilfe. :) :)

Galou
quelle

Antworten:

36

Ich habe einen MD5-Hash mit unterschiedlichen Ergebnissen für Schlüssel und Zertifikat.

Das sagt alles. Sie haben eine Nichtübereinstimmung zwischen Ihrem Schlüssel und dem Zertifikat.

Der Modul sollte übereinstimmen. Stellen Sie sicher, dass Sie den richtigen Schlüssel haben.

dev0z
quelle
Sofern mir nichts fehlt, möchten Sie unbedingt, dass die öffentlichen und privaten Schlüssel (die Zertifikatdatei und die Schlüsseldatei) unterschiedlich sind.
Mark Berry
1
Die modulus' and the Teile des öffentlichen Exponenten im Schlüssel und im Zertifikat müssen übereinstimmen. Zweifellos sind die Dateien unterschiedlich. Der Schlüssel wird für ein bestimmtes Zertifikat generiert.
dev0z
Mein Fehler. Ich dachte, er beziehe sich auf das MD5 der Dateien. Ich sehe jetzt, dass Zertifikate eine separate Modulfunktion haben: Wie kann ich vor der Installation bestätigen, dass der Modul in Ihrem privaten Schlüssel mit dem Modul im öffentlichen Schlüssel Ihres SSL / TLS-Zertifikats übereinstimmt? .
Mark Berry
165

Sobald Sie festgestellt haben, dass sie nicht übereinstimmen, haben Sie immer noch ein Problem - was Sie dagegen tun müssen. Oft kann das Zertifikat nur falsch zusammengestellt werden. Wenn eine Zertifizierungsstelle Ihr Zertifikat signiert, sendet sie Ihnen einen Block, der ungefähr so ​​aussieht

-----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-----

Sie senden Ihnen auch ein Paket (häufig zwei Zertifikate), das ihre Berechtigung darstellt, Ihnen ein Zertifikat zu erteilen. das wird ungefähr so ​​aussehen

-----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-----

außer dass sie leider nicht so deutlich gekennzeichnet sind.

Es ist daher üblich, diese alle in einer Datei zu bündeln - Ihrem Zertifikat und dann den signierenden Zertifikaten. Da sie jedoch nicht leicht zu unterscheiden sind, kommt es manchmal vor, dass jemand sie versehentlich in die andere Reihenfolge bringt - das Signieren von Zertifikaten und dann das endgültige Zertifikat - ohne es zu bemerken. In diesem Fall stimmt Ihr Zertifikat nicht mit Ihrem Schlüssel überein.

Sie können testen, um zu sehen, was das Zertifikat für ausgeführt hält

openssl x509 -noout -text -in yourcert.cert

Oben sehen Sie "Betreff:" und dann Dinge, die Ihren Daten ähneln. Wenn es stattdessen wie Ihre Zertifizierungsstelle aussieht, befindet sich Ihr Bundle wahrscheinlich in der falschen Reihenfolge. Sie könnten versuchen, ein Backup zu erstellen und dann das letzte Zertifikat an den Anfang zu verschieben, in der Hoffnung, dass dies das ist, das Ihr Zertifikat ist.

Wenn dies nicht funktioniert, müssen Sie möglicherweise nur das Zertifikat erneut ausstellen lassen. Wenn ich eine CSR erstelle, möchte ich klar kennzeichnen, für welchen Server sie bestimmt ist (anstatt nur für ssl.key oder server.key) und auf diese Weise eine Kopie mit dem Datum im Namen erstellen, z. B. mydomain.20150306.key usw. Es ist unwahrscheinlich, dass die privaten und öffentlichen Schlüsselpaare mit einem anderen Satz verwechselt werden.

Vynce
quelle
1
Dies hat es für mich auf Nginx behoben!
TTT
24
Riesige +1, um zu zeigen, wie man sieht, was sich in der Zertifizierungskette befindet.
Cbednarski
Auf jeden Fall nützlich, ich verbringe eine Stunde damit zu verstehen, warum Nginx das Zertifikat
ablehnte,
3
Ok, das hat auch bei mir mit einem Comodo-Zertifikat und Ngix funktioniert. Schob einfach den letzten Zertifizierungsblock nach oben. Vielen Dank für die detaillierte Erklärung und den Einblick in dieses Problem.
Andy D
1
Es hilft mir dabei! Sehr nützliche Antwort! Ich danke dir sehr!
Oleg Klimenko
70
  1. Stellen Sie sicher, dass Ihr Zertifikat und Ihr Schlüssel das PEM-Format haben. Wenn nicht, konvertieren Sie sie mit dem Befehl openssl
  2. Überprüfen Sie einen MD5-Hash des öffentlichen Schlüssels, um sicherzustellen, dass er mit dem Inhalt eines privaten Schlüssels übereinstimmt

    openssl x509 -noout -modulus -in certificate.crt | openssl md5
    openssl rsa -noout -modulus -in privateKey.key | openssl md5
    
dev0z
quelle
7
Guter Rat ! Nun, immer noch den gleichen Fehler bekommen, auch wenn MD5 Hash für mich gleich sind ^^
Delphine
4
Vielen Dank, dass Sie angegeben haben, wie Sie die Hashes überprüfen können. Ich fand heraus, dass ich einen Fehler beim Kopieren und Einfügen hatte und am Anfang meines Pems ein einzelner Strich fehlte. Du hast mir gerade viele Kopfschmerzen erspart. Prost.
Justin Fortier
38

Ich hatte dieses Problem, weil ich Bundle und Zertifikat in falscher Reihenfolge hinzugefügt habe, sodass dies möglicherweise jemand anderem helfen könnte.

Vorher (was falsch ist):

cat ca_bundle.crt certificate.crt > bundle_chained.crt

Nachher (was richtig ist)

cat certificate.crt ca_bundle.crt > bundle_chained.crt

Und bitte vergessen Sie nicht, das entsprechende conf (ssl_certificate muss jetzt auf das verkettete crt zeigen) als zu aktualisieren

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

Aus der Nginx-Manpage :

Wenn das Serverzertifikat und das Bundle in der falschen Reihenfolge verkettet wurden, kann nginx nicht gestartet werden und zeigt die folgende Fehlermeldung an:

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
quelle
3
Dies ist tatsächlich eine bessere Antwort auf diese Frage als die akzeptierte.
Baldrs
9

Wenn dies passiert und Sie Let's Encrypt / certbot verwenden, ist der Grund höchstwahrscheinlich, dass Sie chain.pemanstelle von verwendet haben fullchain.pem.

Es sollte ungefähr so ​​sein:

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

Siehe certbot-Dokumente "Wo sind meine Zertifikate?"

Marian
quelle
Oder die Reihenfolge der Zertifikate im Bundle ist falsch: zuerst letsencrypt, dann das eigene Zertifikat.
Ingopingo
5

Ich hatte das gleiche Problem und löste es schließlich, indem ich die Reihenfolge der PEM-Blöcke in der Zertifikatdatei änderte.

Der Zertifikatsblock sollte am Anfang der Datei stehen, dann zwischen den Zwischenblöcken und dann am Stammblock.

Ich habe dieses Problem erkannt, indem ich eine problematische Zertifikatdatei mit einer funktionierenden Zertifikatdatei verglichen habe.

Fuweichin
quelle
1

Meine 5 Cent zu diesem Thema:

Ich hatte das gleiche Problem. Nach ungefähr einer Stunde habe ich festgestellt, dass ich das Zertifikat falsch eingefügt habe.

Wenn Sie einen solchen Fehler haben, überprüfen Sie bitte Ihr Zertifikat.

Nick
quelle
1

In meinem Fall wollte ich das SSL-Zertifikat ändern, weil ich meinen Server geändert habe, sodass ich mit diesem Befehl eine neue CSR erstellen musste:

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

Ich habe die Datei mysite.csr an den SSL-Anbieter der Firma gesendet und nachdem ich das Zertifikat crt erhalten und dann nginx neu gestartet habe, habe ich diesen Fehler erhalten

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

Nach vielen Untersuchungen war der Fehler, dass das Modul aus der Schlüsseldatei nicht mit dem aus der CRT-Datei identisch war

Damit es funktioniert, habe ich eine neue CSR-Datei erstellt, aber ich muss den Namen der Datei mit diesem Befehl ändern

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

Dann hatte ich eine neue CRT-Datei vom Firmenanbieter erhalten, nginx neu gestartet und es funktionierte.

Zitronenfisch
quelle
0

Dies kann auch passieren, wenn Ihre Zertifizierungsstelle ein Zwischenzertifikat ausstellt

Ich bin mit nginx (zweimal) auf dieses Problem gestoßen, und keine der Lösungen in diesem Beitrag hat das Problem erklärt. Der Blog-Beitrag hier von einem netten Gentleman namens Marco hat es geschafft, und ich füge ihn hier für jeden ein, der auch auf das stößt, was ich gesehen habe.https://medium.com/@mrkdsgn/steps-to-install-a-go-daddy-ssl-certificate-on-nginx-on-ubuntu-14-04-ff942b9fd7ff

In meinem Fall war Go-Daddy die Zertifizierungsstelle, und dies hängt davon ab, wie sie das Cert- und das Intermediate-Cert-Bundle ausstellen.

Hier ist der Auszug aus Marcos Blogbeitrag

Wenn Ihre Zertifizierungsstelle bei Nginx ein Zwischenzertifikat enthält, müssen Sie eine einzelne verkettete Zertifikatdatei erstellen, die Ihr Zertifikat und die Zwischenzertifikate der Zertifizierungsstelle enthält.

Mit diesem Befehl können Sie eine kombinierte Datei mit dem Namen example.com.chained.crt erstellen:

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

Shyam Habarakada
quelle
0

In meinem Fall war das Problem, dass ich Zertifikate erstellte, ohne Daten in die CLI-Schnittstelle einzugeben. Als ich Kretifikate regenerierte und alle Felder betrat: Stadt, Staat usw. wurde alles in Ordnung.

 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
quelle
0

Es ist mir passiert, als ich bundle.crt und Hauptzertifikat kombiniert habe. Der Grund war, dass ich das Hauptzertifikat unter bundle.crt kopiert habe. Es sollte umgekehrt sein

1 / main cert 2 / bundle.crt

Krishna
quelle
0

Für Nginx:

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

  2. SSL-Datei domain_com.crtund domain_com.ca-bundleDateien, dann kopieren Sie die neue Datei in Paste domain.com.chained.crt.

3: Nginx-Dateien hinzufügen:

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

Spät startet Nginx neu.

Elektrocoder
quelle
0

SL_CTX_use_PrivateKey ("/ etc / nginx / ssl / file") fehlgeschlagen (SSL: Fehler: 0B080074: x509-Zertifikatroutinen: X509_check_private_key: Schlüsselwerte stimmen nicht überein)

Dieser Fehler kann auftreten, wenn der private Schlüssel des Zertifikats ( ssl_certificate_keyz. B. .keyoder die .pemDatei) nicht mit der öffentlichen Zertifikatdatei ( ssl_certificate) in Ihrer Nginx-Konfiguration übereinstimmt (einchecken nginx.confoder einchecken)sites-enabled/ ). Stellen Sie sicher, dass beide Dateien übereinstimmen.

Überprüfen Sie die Nginx-Fehlerprotokolle auf weitere Details (z /var/log/nginx/error.log. B. ).

Kenorb
quelle
0

In meinem Fall muss ich die Zertifikate meiner Domain verketten.

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

Und in der Konfigurationsdatei /etc/nginx/nginx.conf

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

Starten Sie den Dienst neu und alles in Ordnung.

systemctl restart nginx.service

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

mariofertc
quelle