Hintergrund:
- Ubuntu Server 14.10 64-Bit auf aws.amazon.com/ec2
- Günstiges PositiveSSL-Serverzertifikat von COMODO
- 1 Server-Zertifikat, 2 Intermediate-CA-Zertifikate und 1 Root-CA-Zertifikat als ZIP-Archiv von COMODO
- Citadels WebCit httpsd
Problem:
Die zusammengesetzte Zertifikatskette scheint korrekt zu sein, aber die Überprüfung schlägt fehl.
openssl s_client myhost:port
zeigt, dass die Zertifikatskette und die Paare aus Aussteller und Zertifikatsinhaber in der Kette korrekt angeordnet sind, aber:
verify error:num=19:self signed certificate in certificate chain
Das Stamm-CA-Zertifikat wird von OpenSSL nicht akzeptiert, obwohl es standardmäßig im Vertrauensspeicher des Ubuntu-Servers gefunden wird.
Konkret:
AddTrustExternalCARoot.crt
Per E-Mail von COMODO erhalten und
/etc/ssl/certs/AddTrust_External_Root.pem
die Links dazu
/usr/share/ca-certificates/mozilla/AddTrust_External_Root.crt
sind identisch.
Was ist hier falsch?
Antwort1
OpenSSL hat zumindest bis zur aktuellen Version (1.0.2a) eineInsektwo s_client
ohne -CA{path,file}
Argumentverwendet nicht den Standard-Truststorewie es sollte, und kann daher Zertifikate, die gemäß diesem Truststore gültig sind, nicht überprüfen. (Auch s_server
und s_time
, aber bei diesen kümmert man sich selten um die Überprüfung.) Siehehttps://serverfault.com/questions/607233/how-to-make-openssl-s-client-using-default-ca. Ein Fix wird in dev angekündigt, aber es kann einige Zeit dauern, bis er veröffentlicht und verteilt wird. In der Zwischenzeit müssen Sie die -CA*
Argumente explizit angeben. Beachten Sie, dass openssl verify
dieser Fehler nicht vorliegt und das Zertifikat/die Kette daher korrekt als gültig gemeldet wurde.
AKTUALISIERUNG26.08.2015:Fix wurde veröffentlicht12.06.2015 in 1.0.1o und 1.0.2c. Außerdem habe ich bei der Untersuchung eines anderen Themas festgestellt, dassRedHat-Pakete waren möglicherweise in Ordnung. Genauer gesagt openssl-1.0.1e-30.el6.11
enthält das CentOS-Quell-RPM, von dem ich weiß, dass es sich um eine Kopie des RedHat-RPM handelt (was ich aber nicht einfach bestätigen kann), openssl-1.0.1c-default-paths.patch
Änderungen s_client.c s_server.c s_time.c
vom 06.12.2012, die den Upstream-Fixes vom 12.06.2015 entsprechen (obwohl sie inhaltlich nicht identisch sind). Vorausgesetzt, dieser Patch wurde in RedHat- und CentOS-Paketen angewendet, was ich nicht einfach überprüfen kann, würden sie wie erwartet funktionieren.
Antwort2
Ich hatte kürzlich ein ähnliches Problem mit Comodo-Zertifikaten, als ich ein Skript mit Ruby entwickelte. Letztendlich lag es daran, dass OpenSSL es nicht im Speicher hatte, obwohl es so aussah.
Um dies zu testen, laden Sie alle Comodo-Zwischenzertifikate herunter und erstellen Sie ein Zertifikatspaket, das etwa so aussieht (Sie müssen je nach heruntergeladenem Zertifikat unterschiedliche Zertifikatsnamen verwenden):
cat EssentialSSLCA_2.crt ComodoUTNSGCCA.crt UTNAddTrustSGCCA.crt AddTrustExternalCARoot.crt > yourDomain.ca-bundle
Comodo bietet hierzu einen Artikel an.
Versuchen Sie anschließend, das Zertifikat erneut mit OpenSSL zu verifizieren und den Zertifikatsspeicher in der Befehlszeile anzugeben:
openssl verify -untrusted yourDomain.ca-bundle cert.pem
Dieses Beispiel wurde übernommen vondieser Unix- und Linux-StackExchange-Artikel.
Sobald Sie ermittelt haben, um welches Zertifikat es sich handelt, sollte es möglich sein, das Zertifikat zum lokalen Zertifikatspeicher hinzuzufügen.was hier für Ubuntu ausführlich beschrieben wirdund lautet etwa:
Erstellen Sie ein Verzeichnis für zusätzliche CA-Zertifikate in /usr/share/ca-certificates
sudo mkdir /usr/share/ca-certificates/extra
Kopieren Sie die Datei '.crt' in das Verzeichnis
sudo cp foo.crt /usr/share/ca-certificates/extra/foo.crt
Lassen Sie Ubuntu den Pfad der '.crt'-Datei relativ zu /usr/share/ca-certificates zu /etc/ca-certificates.conf hinzufügen
sudo dpkg-reconfigure ca-certificates
Antwort3
Dem Comodo-Stammzertifikat wird nicht mehr vertraut. Wenn Sie den Grund nicht kennen, googeln Sie nach „von Comodo gestohlenes Zertifikat“.
Ein Comodo-Zertifikat mag zwar günstig sein, sein Wert ist jedoch weitaus geringer als sein Preis: Es ist praktisch wertlos, die Vertrauenskette ist unterbrochen.