it-swarm.com.de

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

Ich möchte das SSL-Zertifikat von beispielsweise https://www.google.com mit wget oder anderen Befehlen herunterladen. Irgendeine Unix-Kommandozeile? wget oder openssl?

192
RainDoctor

Ich habe die Antwort gefunden. Openssl bietet es.

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

59
RainDoctor

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 /tmp/$SERVERNAME.cert Gespeichert.

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

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

sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' Entfernt Informationen über die Zertifikatkette und Verbindungsdetails. Dies ist das bevorzugte Format zum Importieren des Zertifikats in andere Schlüsselspeicher.

258

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 ist so konzipiert, dass ein interaktiver Client für die Site bereitgestellt wird. Sie müssen ihm daher eine leere Eingabe geben (in diesem Beispiel von /dev/null) um die interaktive Sitzung zu beenden.

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

dieser Modus von openssl erwartet stdin, daher stellen wir ihn über true | bereit. Dadurch wird eine Verbindung zu dem im Parameter -connect angegebenen Server hergestellt. 2>/dev/null Stummschalten von Fehlern (optional). Wir können die gesamte Ausgabe an den x509-Parser übergeben und /dev/stdin Angeben, um die Shell-Pipe als Eingabedatei zu verwenden. Und das gibt nur den Teil -----BEGIN CERTIFICATE----- Bis -----END CERTIFICATE----- Der Ausgabe von s_client Aus. Sie können dies in eine Datei umleiten, indem Sie am Ende des Befehls > google.com.pem Hinzufügen.


Wie ich am besten beurteilen kann, wird dadurch die Zertifikatkette nicht überprüft, sondern nur, welche SSL-Identität der Endserver bereitstellt.

9
ThorSummoner

basierend auf der Antwort von @bignose ist hier 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
9
oDDsKooL

Alternative Syntax mit Ex und Prozessersetzung:

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