Frage Wie lade ich das SSL-Zertifikat von einer Website herunter?


Ich möchte das SSL-Zertifikat herunterladen, sagen wir https://www.google.commit wget oder anderen Befehlen. Irgendeine Unix-Befehlszeile? wget oder openssl?


162
2018-05-07 21:01


Ursprung




Antworten:


Um das Zertifikat herunterzuladen, müssen Sie den in openssl eingebauten Client wie folgt verwenden:

echo -n | openssl s_client -connect HOST:PORTNUMBER \
    | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert

Dadurch wird das Zertifikat gespeichert /tmp/$SERVERNAME.cert.

Sie können verwenden -showcerts wenn Sie alle Zertifikate in der Kette herunterladen möchten. Wenn Sie jedoch nur das Serverzertifikat herunterladen möchten, müssen Sie dies nicht angeben -showcerts

echo -n gibt eine Antwort an den Server, sodass die Verbindung freigegeben wird

sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' Entfernt Informationen über die Zertifikatskette und Verbindungsdetails. Dies ist das bevorzugte Format, um das Zertifikat in andere Keystores zu importieren.


219
2017-10-19 22:59



zu schätzen, dass Sie nicht nur eine gute Antwort gegeben haben, sondern auch eine genaue Erklärung. - marco.m
Tut -showcerts Zeige das Server / Blatt-Zertifikat auch? Ich dachte, dass es nur Intermediates zeigte, wenn dieser Switch enthalten war. - Mike B
Wie die Antwort sagte, s_client zeigt immer das Serverzertifikat an (wenn es eines gibt, d. h. der Server antwortet auf Hallo und wählt keine anonyme Suite aus). -showcerts zeigt an alles die Zertifikate erhalten, Server-Zertifikat zuerst dann Zwischenprodukte und / oder Root. - dave_thompson_085
das funktioniert jedoch nicht in den presences eines proxy. - Frederick Nord
Dies funktioniert auch nicht bei Servern, die SNI verwenden (mehrere Zertifikate / Domains an einer einzigen IP-Adresse). Um Probleme zu vermeiden, geben Sie den Parameter servername von openssl an: openssl s_client -connect HOST: PORTNUMBER -servername CN - verhage


Ich habe die Antwort gefunden. Openssl bietet es an.

openssl s_client -connect $ {REMHOST}: $ {REMPORT}


54
2018-05-07 21:05



ebenfalls openssl x509 -text <<EOF cert-text EOF um Details des Zertifikats zu sehen - mpapis
sudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pem mit freundlicher Genehmigung von serverfault.com/questions/139728/ ... - pulkitsinghal
diese erreicht das gleiche und überspringt die sed hacken. - phs
Dies überprüft nur ein Zertifikat, was ist, wenn der Dienst Teil einer Lastausgleichsgruppe von Servern ist, von denen jeder ein anderes Zertifikat hat, möglicherweise von einer anderen Stammzertifizierungsstelle signiert? Oder mit anderen Worten, ein Mitm-Angriff könnte diese Anfrage an die reale Site weiterleiten und dann andere Anfragen an seine Server richten. Gibt es Möglichkeiten, dies zu überprüfen? Und um eine Liste aller Zertifikate zu erhalten, die eine Domain wirklich hat? - Jens Timmerman
@JensTimmerman "Oder mit anderen Worten, ein Mitm-Angriff könnte diese Anfrage an die echte Site weiterleiten und dann andere Anfragen an seine Server richten." Das ist nur möglich, wenn der Man-in-the-Middle über ein gültiges Zertifikat für den Zielserver verfügt (oder der Client dumm ist, überprüft das Serverzertifikat nicht). Offensichtlich, wenn der Server manchmal ein anderes Zertifikat anbietet, können Sie nur hoffen, sie wahrscheinlich alle durch wiederholte Verbindungsversuche zu erhalten. - David Tonhofer


Das GNUTLS Kundenwerkzeug, gnutls-cli, kann das auch einfach machen:

gnutls-cli --print-cert www.example.com \
        < /dev/null \
        > www.example.com.certs

Das Programm wurde entwickelt, um der Site einen interaktiven Client zur Verfügung zu stellen, daher müssen Sie ihm eine leere Eingabe geben (in diesem Beispiel von /dev/null) um die interaktive Sitzung zu beenden.


20
2017-10-07 06:19



Wie würde es Gnutls durch den (https proxy) konfigurierten https-Proxy verbinden und das Zertifikat drucken, das es austauscht? - Frederick Nord


basierend auf @ bignose Antwort, hier ist eine in sich geschlossene Version, die gut in z. ein Kochrezept:

sudo apt-get install gnutls-bin 
gnutls-cli --print-cert myserver.com </dev/null| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > myserver.crt
sudo cp myserver.crt /usr/local/share/ca-certificates/myserver.crt
sudo update-ca-certificates

8
2018-05-27 09:31





true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509

Dieser Modus von openssl erwartet stdin, also stellen wir es via zur Verfügung true |Dies stellt eine Verbindung zu dem Server her, der im Parameter -connect angegeben ist. 2>/dev/null silences errors (optional), wir können die gesamte Ausgabe in den x509-Parser übergeben und spezifizieren /dev/stdin Verwenden der Shell-Pipe als Eingabedatei Und das wird nur das ausgeben -----BEGIN CERTIFICATE----- zu -----END CERTIFICATE----- Teil des s_client Ausgabe. Sie können das in eine Datei umleiten, indem Sie hinzufügen > google.com.pem bis zum Ende des Befehls.


Soweit ich das beurteilen kann, überprüft dies nicht die Zertifikatskette, es kann Ihnen nur sagen, welche SSL-Identität der Endserver bietet.


6
2018-01-12 10:38



(1) Dies verbessert nicht wirklich die Antworten von vor 6 Jahren (2) x509 liest stdin standardmäßig so -in /dev/stdin ist überflüssig (3) s_client Überprüft, ob das Server-Cert korrekt mit einem lokalen Vertrauensanker (root) verkettet ist und noch nicht abgelaufen ist. Sie haben jedoch die Informationen unterdrückt, die dies anzeigen würden. (4) Es wird NICHT auf Widerruf überprüft (5) Name in der Server-Cert nur in 1.0.2 und dann nicht standardmäßig (aber Sie können dies leicht überprüfen, indem Sie auf das Cert danach) - dave_thompson_085
@ dave_thompson_085, die Frage ist, wie man das Zertifikat herunterlädt, aber nicht die Ketteninformationen anzeigt. Ich mag die openssl x509 viel besser als sed in einer anderen Antwort. - Der_Meister


Alternative Syntax mit Ex- und Prozesssubstitution:

ex +'/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq > file.crt

0