Hintergrund:
- Ubuntu Server 14.10 64-Bit auf aws.amazon.com/ec2
- Günstiges PositiveSSL Server Zertifikat von COMODO
- 1 Server-Zertifikat, 2 Zwischen-CA-Zertifikate und 1 Root-CA-Zertifikat als ZIP-Archiv von COMODO
- Zitadelle WebCit httpsd
Problem:
Die verkettete Zertifikatkette scheint korrekt zu sein, die Überprüfung schlägt jedoch fehl.
openssl s_client myhost:port
Zeigt die Zertifikatskette und die Aussteller-Betreff-Paare korrekt in der Kette an, aber:
verify error:num=19:self signed certificate in certificate chain
Das Zertifikat der Stammzertifizierungsstelle wird von openssl nicht akzeptiert, obwohl es standardmäßig im Ubuntu Server Trust Store gefunden wird.
Konkret:
AddTrustExternalCARoot.crt
Per E-Mail von COMODO erhalten und
/etc/ssl/certs/AddTrust_External_Root.pem
welche Links
/usr/share/ca-certificates/mozilla/AddTrust_External_Root.crt
identisch sind.
Was ist hier falsch?
linux
ssl
certificate
Reinhard Seifert
quelle
quelle
openssl s_client
des HTML-Codes der Seite angezeigt wird und w3m auch die Seite nach der Beschwerde über das nicht vertrauenswürdige Zertifikat anzeigt . Aber Firefox zeigt die Seite einfach nicht an, ohne eine Warnung über das Zertifikat zu erhalten.openssl verify -CAfile chained.crt chained.crt
openssl noch seltsamer ist: Übergibt "OK" (chained.crt ist das verkettete Zertifikat mit Server-Zertifikat, Zwischenzertifikaten und Root-CA-Zertifikat)! Für mich ist dies ein inkonsistentes und seltsames Verhalten von openssl. Die Zertifikatskette ist korrekt, das letzte Zertifikat befindet sich im Truststore und openssl erkennt es sowohl als einzelnes Zertifikat als auch als CA-Datei, jedoch nicht als letztes in einer Kette. Ist das ein Bug?Antworten:
OpenSSL hat zumindest durch current (1.0.2a) einen Fehler, bei dem
s_client
mit NO--CA{path,file}
Argument der Standard-Truststore nicht ordnungsgemäß verwendet wird und daher Zertifikate, die gemäß diesem Truststore gültig sind, nicht überprüft werden können. (Auchs_server
unds_time
, aber die Überprüfung ist selten.) Siehe https://serverfault.com/questions/607233/how-to-make-openssl-s-client-using-default-ca . Ein Fix wird in dev angekündigt, es kann jedoch einige Zeit dauern, bis er veröffentlicht und verteilt wird. In der Zwischenzeit müssen Sie die-CA*
Argumente explizit angeben . Beachten Sie, dassopenssl verify
dieser Fehler nicht vorliegt und dass das Zertifikat / die Kette daher korrekt als gültig gemeldet wurde.UPDATES 26.08.2015: Update wurde am 12.06.2015 in 1.0.1o und 1.0.2c veröffentlicht. Als ich etwas anderes untersuchte, stellte ich außerdem fest, dass RedHat-Pakete möglicherweise in Ordnung waren . Genauer gesagt ist die CentOS-Quell-RPM, für
openssl-1.0.1e-30.el6.11
die ich verstehe, eine Kopie der RedHat- RPM (die sich jedoch nicht leicht bestätigen lässt),openssl-1.0.1c-default-paths.patch
die Änderungens_client.c s_server.c s_time.c
vom 06.12.2012 enthält, die der Version 2015 äquivalent (aber inhaltlich nicht identisch) zu sein scheinen / 06/12 Upstream-Korrekturen. Unter der Annahme, dass dieser Patch in RedHat- und CentOS-Paketen angewendet wurde, die ich nicht ohne Weiteres überprüfen kann, würden sie wie erwartet funktionieren.quelle
Ich hatte kürzlich ein ähnliches Problem mit Comodo-Zertifikaten, als ich ein Skript mit Ruby entwickelte. Am Ende war es so, dass OpenSSL es nicht im Laden hatte, obwohl es so aussah.
Um dies zu testen, laden Sie alle Zwischenzertifikate von Comodo herunter und erstellen Sie so etwas wie ein Zertifikat-Bundle (Sie müssen je nach dem, was Sie heruntergeladen haben, unterschiedliche Zertifikatsnamen verwenden):
Comodo hat einen Artikel dazu.
Versuchen Sie anschließend erneut, das Zertifikat mit OpenSSL zu überprüfen und den Zertifikatsspeicher in der Befehlszeile anzugeben:
Dieses Beispiel wurde aus diesem Artikel zu Unix und Linux StackExchange übernommen .
Sobald Sie festgestellt haben, um welches Zertifikat es sich handelt, sollte es möglich sein, das Zertifikat zum lokalen Zertifikatspeicher hinzuzufügen. Dies wird hier für Ubuntu beschrieben und sieht in etwa so aus:
Erstellen Sie ein Verzeichnis für zusätzliche CA-Zertifikate in / usr / share / ca-certificates
Kopieren Sie die CRT-Datei in das Verzeichnis
Lassen Sie Ubuntu den Pfad der '.crt'-Datei relativ zu / usr / share / ca-certificates zu /etc/ca-certificates.conf hinzufügen
quelle
openssl verify AddTrustExternalRootCA.crt
(das ist der Schuldige am Ende der Kette) bearbeitet wird, wird "OK" übergeben, dh openssl kennt die in / etc / ssl / certs verknüpften Zertifikate sehr gut.openssl verify -CAfile CAbundle.crt myserver_com.crt
es den Test "OK".SSL_CTX_set_default_verify_paths()
oder einige verwandte X509_STORE Routinen. Die OpenSSL- Befehlszeile soll den Standardspeicher verwenden, dies schlägt jedoch derzeit für einige Funktionen fehl, auchs_client
aufgrund eines Fehlers. Siehe meine Antwort. OTOHverify
tut es verwenden, die hier zur Verwirrung wahrscheinlich hinzugefügt.Das comodo-Stammzertifikat ist nicht mehr vertrauenswürdig. Wenn Sie nicht wissen, warum, suchen Sie bei Google nach "comodo gestohlenes Zertifikat".
Während ein comodo-Zertifikat billig sein mag, ist sein Wert viel geringer als sein Preis: Es ist praktisch wertlos, die Vertrauenskette ist unterbrochen.
quelle
openssl verify AddTrustExternalCARoot.crt
direkten Verwendung als OK bestätigt , jedoch nicht als letztes Zertifikat in einer Kette akzeptiert.