Die am meisten gewählte Antwort ist leider falsch. Sie wird zwar die gewünschte Wirkung haben, aber aus den falschen Gründen.
Die Befehle in VonC's Antwort fügen alle Zertifikate in der Kette zum Trust-Anchor-Speicher hinzu. Diese Zertifikate sind jedoch keine Trust-Anker (oder Root-CA-Zertifikate in anderen Worten); es handelt sich um Endnutzer- und Zwischen-CA-Zertifikate.
Der TLS-Standard RFC 5246 besagt:
Zertifikatsliste
Dies ist eine Sequenz (Kette) von Zertifikaten. Das Zertifikat des Senders MUSS zuerst in der Liste stehen. Jedes folgende Zertifikat MUSS das vorherige direkt beglaubigen. Da die Zertifikatsvalidierung erfordert, dass Root-Schlüssel unabhängig verteilt werden, darf das selbstsignierte Zertifikat, das die Root-Zertifizierungsstelle angibt, aus der Kette weggelassen werden, unter der Annahme, dass der entfernte Teil es bereits besitzt, um es in jedem Fall zu validieren.
Daher könnte der Befehl von VonC (und anderen) durchaus alle falschen Zertifikate hinzufügen und nicht das Root-CA.
Ein Endnutzer- oder Zwischen-CA-Zertifikat ist kein Trust-Anchor. Diese Zertifikate können sich im Laufe der Zeit ändern, und in diesem Fall wird dasselbe Problem erneut auftreten. Außerdem, was passiert, wenn das Endnutzerzertifikat aus irgendeinem Grund widerrufen wird? Ihr Computer könnte weiterhin dem widerrufenen Zertifikat vertrauen - in der Praxis kann die genaue Reaktion je nach verwendeter Kryptobibliothek unterschiedlich sein, da dies nicht gut definiert ist in den Standards und daher Variationen in der Implementierung unterliegt.
Der korrekte Weg, dieses Problem zu beheben, besteht darin, das letzte Zertifikat in der Kette zu überprüfen, zu bestätigen, dass es sich nicht um ein Root-CA handelt (da dies vom Server gesendet werden Kann - siehe das oben zitierte RFC-Auszug) und falls dies der Fall ist, den Issuer und möglicherweise das AKI-Feld zu überprüfen, um festzustellen, welches Root-CA dieses erste Zwischen-CA-Zertifikat ausgestellt hat. Nachdem die Details herausgearbeitet wurden, müssen Sie das Repository dieses Root-CA besuchen und das Zertifikat (und den Hash überprüfen) dieses herunterladen, bevor Sie es herunterladen. Überprüfen Sie das CP/CPS dieses Root-CA, bevor Sie sich entscheiden, es in Ihren Trust-Anchor-Speicher zu installieren.
Wenn das letzte Zertifikat das Root-CA ist, verwenden Sie die openssl x509...
-Befehle, um die Details anzuzeigen, und führen Sie dann eine Sorgfaltspflicht durch, bevor Sie entscheiden, ob Sie dieses einzige Zertifikat in Ihren Trust-Anchor-Speicher installieren sollten.
Es kann und sollte keinen automatischen Prozess geben, um das oben Genannte auszuführen, da Sie die Herkunft des Trust-Ankers überprüfen müssen, bevor Sie entscheiden, ihn Ihrem Trust-Anchor-Speicher hinzuzufügen. Fragen Sie sich, warum es nicht Teil des ca-certificate
-Pakets (oder eines entsprechenden für Ihre Distribution) war, bevor Sie es blind installieren.
Es kann jedoch hilfreich sein, etwas Ähnliches wie das Folgende auszuführen, um den Subject und Issuer des letzten Zertifikats in der Kette anzuzeigen, was Ihnen dabei helfen könnte, das fehlende Root-CA-Zertifikat zu verfolgen:
echo -n | openssl s_client -showcerts -servername www.github.com -connect www.github.com:443 2>/dev/null | tac | awk '/-END CERTIFICATE-/{f=1} f;/-BEGIN CERTIFICATE-/{exit}' | tac | openssl x509 -noout -subject -issuer
Was in meinem Fall Ende Mai 2021 zu folgendem Ergebnis führt:
Subject=C = US, O = "DigiCert, Inc.", CN = DigiCert High Assurance TLS Hybrid ECC SHA256 2020 CA1
Issuer=C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA
Aus dem obigen Beispiel können wir sehen, dass der Server das Zwischen-CA-Zertifikat gesendet hat, nicht das Root (der Subject und Issuer sind unterschiedlich). Dieses Zwischen-CA-Zertifikat wurde von DigiCert's High Assurance EV Root CA unterzeichnet. Wir können nun zum DigiCert-Repository gehen und dieses bestimmte Zertifikat herunterladen.
Bevor Sie dieses Zertifikat installieren, stellen Sie sicher, dass es dasjenige ist, das Ihr Zwischen-CA signiert hat, indem Sie openssl x509 -noout -text -in
gegen es ausführen und den Wert der X509v3 Authority Key Identifier-Erweiterung mit derselben Erweiterung im Zertifikat vergleichen, das vom Server gesendet wurde. Hinweis: Sie können diese Erweiterung auf dem Zwischen-CA-Zertifikat, das vom Server gesendet wurde, anzeigen, indem Sie -subject -issuer
am Ende des vorherigen Befehls zu -text
ändern.
Sobald Sie sicher sind, dass das Root-CA-Zertifikat, das Sie heruntergeladen haben, das richtige ist, und Sie eine Sorgfaltspflicht durchgeführt haben und entschieden haben, dass Sie diesem Root-CA vertrauen, fügen Sie es Ihrem Trust-Anchor-Speicher hinzu:
sudo mv /usr/local/share/ca-certificates/
sudo update-ca-certificates
Beachten Sie, dass die Datei im PEM-Format vorliegen muss und der Dateiname mit .crt
enden muss, da sonst update-ca-certificates
sie nicht erkennen wird.