OpenSSL: Das erste Zertifikat für die Experian-URL kann nicht überprüft werden


77

Ich versuche, eine SSL-Verbindung zu Experian in Ubuntu 10.10 mit dem OpenSSL-Client zu überprüfen.

openssl s_client -CApath /etc/ssl/certs/ -connect dm1.experian.com:443

Das Problem besteht darin, dass die Verbindung mit dem Überprüfungs-Rückkehrcode 21 geschlossen wird (das erste Zertifikat kann nicht überprüft werden).

Ich habe die Zertifikatsliste überprüft, und das zum Signieren von Experian verwendete Zertifikat (VeriSign Class 3 Secure Server CA - G3) ist in der Liste enthalten.

/etc/ssl/certs/ca-certificates.crt 

Ich weiß jedoch nicht, warum das erste Zertifikat nicht überprüft werden kann. Danke im Voraus.

Die gesamte Antwort finden Sie hier: https://gist.github.com/1248790

Antworten:


111

Die erste Fehlermeldung informiert Sie über das Problem:

Überprüfungsfehler: num = 20: Lokales Ausstellerzertifikat kann nicht abgerufen werden

Die ausstellende Zertifizierungsstelle des Endentitätsserverzertifikats ist

VeriSign Class 3 Secure Server CA - G3

Schauen Sie in Ihrer CA-Datei genau nach - Sie werden dieses Zertifikat nicht finden, da es sich um eine Zwischen-CA handelt. Sie haben festgestellt, dass es sich um eine G3 Public Primary CA von VeriSign mit ähnlichem Namen handelt .

Aber warum ist die andere Verbindung erfolgreich, diese jedoch nicht? Das Problem ist eine Fehlkonfiguration der Server (überzeugen Sie sich selbst von der -debugOption). Der "gute" Server sendet während des Handshakes die gesamte Zertifikatkette und stellt Ihnen so die erforderlichen Zwischenzertifikate zur Verfügung.

Der fehlerhafte Server sendet Ihnen jedoch nur das Endentitätszertifikat, und OpenSSL kann das fehlende Zwischenzertifikat nicht "on the fly" herunterladen (was durch Interpretation der Authority Information Access-Erweiterung möglich wäre). Daher schlägt Ihr Versuch fehl, s_clientaber es wäre trotzdem erfolgreich, wenn Sie mit FireFox (das die Funktion "Zertifikatserkennung" unterstützt) zur gleichen URL navigieren.

Sie können das Problem entweder auf der Serverseite beheben, indem der Server auch die gesamte Kette sendet, oder indem Sie das fehlende Zwischenzertifikat als clientseitigen Parameter an OpenSSL übergeben.


5
Sie können alle lokalen CAs unter Linux mit-CAfile /etc/ssl/certs/ca-certificates.crt
encc


Ein Konflikt zwischen verschiedenen VirtualHosts in Ihrer Apache-Konfiguration kann ebenfalls ein Problem sein. Versuchen Sie etwas wie dieses, um das Problem zu identifizieren: grep -riE 'virtualhost|server(name|alias)' /etc/httpd
Vijay

43

Hinzufügen zusätzlicher Informationen zur Antwort von Emboss.

Einfach ausgedrückt enthält Ihre Zertifikatskette ein falsches Zertifikat.

Zum Beispiel hat Ihre Zertifizierungsstelle Ihnen höchstwahrscheinlich 3 Dateien gegeben.

  • your_domain_name.crt
  • DigiCertCA.crt # (oder wie auch immer der Name Ihrer Zertifizierungsstelle lautet)
  • TrustedRoot.crt

Sie haben höchstwahrscheinlich alle diese Dateien zu einem Bundle zusammengefasst.

-----BEGIN CERTIFICATE----- 
(Your Primary SSL certificate: your_domain_name.crt) 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
(Your Intermediate certificate: DigiCertCA.crt) 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
(Your Root certificate: TrustedRoot.crt) 
-----END CERTIFICATE-----

Wenn Sie das Bundle erstellen, aber eine alte oder eine falsche Version Ihres Zwischenzertifikats (in meinem Beispiel DigiCertCA.crt) verwenden, erhalten Sie genau die Symptome, die Sie beschreiben.

Laden Sie alle Zertifikate von Ihrer Zertifizierungsstelle erneut herunter und erstellen Sie ein neues Paket.


1
*** Das ist mein genaues Problem. Ich habe diese digitalocean.com/community/tutorials/… *** gemacht und dann mit den folgenden *** digitalocean.com/community/tutorials/… *** von Apache zu Nginx gewechselt. Alles war gut. Aber jetzt gibt mir der Facebook-Debugger: Curl-Fehler: SSL_CACERT SSL-Zertifikat Problem: Lokales Ausstellerzertifikat kann nicht abgerufen werden *** FRAGE: Wie lade ich alle Zertifikate von Ihrer Zertifizierungsstelle erneut herunter und erstelle in meiner Situation ein neues Bundle?
Alemac852

11

Ich bin auf dasselbe Problem gestoßen, als ich mein signiertes Zertifikat auf einer Amazon Elastic Load Balancer-Instanz installiert habe.

Alle schienen über einen Browser (Chrome) gefunden zu werden, aber der Zugriff auf die Site über meinen Java-Client erzeugte die Ausnahme javax.net.ssl.SSLPeerUnverifiedException

Was ich nicht getan hatte, war die Bereitstellung einer "Zertifikatketten" -Datei bei der Installation meines Zertifikats auf meiner ELB-Instanz (siehe /server/419432/install-ssl-on-amazon-elastic-load-balancer-with -godaddy-wildcard-zertifikat )

Wir haben unseren signierten öffentlichen Schlüssel nur von der Signaturbehörde erhalten, sodass ich meine eigene Zertifikatskettendatei erstellen musste. Über die Zertifikatanzeige meines Browsers habe ich jedes Zertifikat in der Signaturkette exportiert. (Die Reihenfolge der Zertifikatskette ist wichtig, siehe https://forums.aws.amazon.com/message.jspa?messageID=222086 )


+1 für die Idee des Herunterladens aus dem Browser. Ich habe auch für Verisign gefunden, dass Sie Ihr SSL hier überprüfen können. Ssltools.websecurity.symantec.com/checker/#certChecker und sie geben Ihnen einen Download-Link.
HDave

0

Folgendes können Sie tun:

Exim SSL-Zertifikate

Standardmäßig verwendet die Datei /etc/exim.conf die Zertifikats- / Schlüsseldateien:

/etc/exim.cert
/etc/exim.key

Wenn Sie sich also fragen, wo Sie Ihre Dateien einstellen sollen, ist dies der richtige Ort.

Sie werden von den Optionen der exim.conf gesteuert:

tls_certificate = /etc/exim.cert
tls_privatekey = /etc/exim.key

Zwischenzertifikate

Wenn Sie über ein CA-Stammzertifikat (CA-Bundle, Kette usw.) verfügen, fügen Sie den Inhalt Ihrer CA nach Ihrem eigentlichen Zertifikat in die Datei exim.cert ein.

Wahrscheinlich eine gute Idee, um sicherzustellen, dass Sie eine Kopie von allem an anderer Stelle haben, falls Sie einen Fehler machen.

Dovecot und ProFtpd sollten es auch korrekt lesen, sodass Dovecot die Option ssl_ca nicht mehr benötigt. In beiden Fällen müssen weder an der exim.conf noch an der dovecot.conf (/etc/dovecot/conf/ssl.conf) Änderungen vorgenommen werden.


-1

Wenn Sie MacOS verwenden, verwenden Sie:

sudo cp /usr/local/etc/openssl/cert.pem /etc/ssl/certs

Nach diesem Trust Anker nicht gefunden Fehler verschwindet

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.