Ich möchte das SSL-Zertifikat von https://www.google.com mit wget oder einem anderen Befehl herunterladen . Irgendeine Unix-Befehlszeile? wget oder openssl?
quelle
Ich möchte das SSL-Zertifikat von https://www.google.com mit wget oder einem anderen Befehl herunterladen . Irgendeine Unix-Befehlszeile? wget oder openssl?
Um das Zertifikat herunterzuladen, müssen Sie den in openssl integrierten 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 in 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 keine Angaben machen-showcerts
echo -n
gibt eine Antwort an den Server, so dass die Verbindung freigegeben wird
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
Entfernt Informationen zur Zertifikatskette und zu den Verbindungsdetails. Dies ist das bevorzugte Format zum Importieren des Zertifikats in andere Keystores.
-showcerts
zeigen auch den Server / Blatt cert? Ich dachte, es werden nur Zwischenprodukte angezeigt, wenn dieser Schalter enthalten war.s_client
immer das Server-Zertifikat angezeigt (falls vorhanden, dh der Server antwortet auf "Hallo" und wählt keine anonyme Suite aus).-showcerts
Zeigt alle empfangenen Zertifikate an, zuerst Server-Zertifikat, dann Intermediates und / oder Root.Ich habe die Antwort gefunden. Openssl bietet es.
quelle
openssl x509 -text <<EOF cert-text EOF
Details des Zertifikats zu sehensudo 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/…sed
Hack.Das GNUTLS- Client-Tool
gnutls-cli
kann dies auch einfach machen:Das Programm soll der Site einen interaktiven Client bereitstellen. Sie müssen ihm daher eine leere Eingabe (in diesem Beispiel von
/dev/null
) geben, um die interaktive Sitzung zu beenden.quelle
Basierend auf der Antwort von @bignose ist hier eine in sich geschlossene Version, die zB gut zu einem Kochrezept passt:
quelle
Dieser Modus von openssl erwartet stdin, also stellen wir es über zur Verfügung
true |
. Dies verbindet sich mit dem Server, der im Parameter -connect angegeben ist.2>/dev/null
Stellt Fehler still (optional), können wir die gesamte Ausgabe an den x509-Parser übergeben und angeben, dass/dev/stdin
die Shell-Pipe als Eingabedatei verwendet werden soll. Und das wird Ausgang nur die-----BEGIN CERTIFICATE-----
zu-----END CERTIFICATE-----
Teil ders_client
Ausgabe. Sie können dies in eine Datei umleiten, indem Sie> google.com.pem
sie am Ende des Befehls einfügen.Wie ich am besten beurteilen kann, überprüft dies nicht die Zertifikatskette, sondern nur die vom Endserver bereitgestellte SSL-Identität.
quelle
x509
liest standardmäßig stdin,-in /dev/stdin
ist also redundant. (3)s_client
überprüft, ob das Serverzertifikat korrekt mit einem lokalen Vertrauensanker (root) verkettet ist und nicht abgelaufen ist, aber Sie haben Die Informationen, die dies anzeigen würden, wurden unterdrückt. (4) Es wird NICHT auf Widerruf überprüft. (5) Der Name wird nur in 1.0.2 und dann nicht standardmäßig im Serverzertifikat überprüft danach)Alternative Syntax unter Verwendung von Ex und Prozessersetzung:
quelle