Ich möchte das SSL-Zertifikat von https://www.google.com mit wget oder einem anderen Befehl herunterladen . Irgendeine Unix-Befehlszeile? wget oder openssl?
Ich möchte das SSL-Zertifikat von https://www.google.com mit wget oder einem anderen Befehl herunterladen . Irgendeine Unix-Befehlszeile? wget oder openssl?
Antworten:
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.
openssl s_client -connect $ {REMHOST}: $ {REMPORT}
openssl x509 -text <<EOF cert-text EOF
Details des Zertifikats zu sehen
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/…
Das GNUTLS- Client-Tool gnutls-cli
kann dies auch einfach machen:
gnutls-cli --print-cert www.example.com \
< /dev/null \
> www.example.com.certs
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.
Basierend auf der Antwort von @bignose ist hier eine in sich geschlossene Version, die zB gut zu einem Kochrezept passt:
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
true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509
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 der s_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.
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)