One-Liners rund um kryptographische Schlüssel

Ich hatte soeben (mal wieder) die Anforderung, möglichst skriptgesteuert OpenSSL-Zertifikate von Webservern herunterzuladen und deren Fingerprint anzuzeigen (warum zum Geier zeigen die meisten Netz-Clients einen Fingerprint in der GUI zwar an, lassen es aber nicht zu, ihn als Text zu markieren und zu kopieren?).
Ein guter Anlaß, die ganzen Skript-Tools für die "üblichen Verdächtigen" mal zusammenzutragen.

SSL (insbes. https)

openssl hat ja eine schier unglaubliche Menge an Parametern und Optionen - unter anderem bietet openssl mit s_client und s_server einen primitiven SSL-Client/Server.

Zertifikate herunterladen

Folgender Oneliner läd ein Zertifikat und gibt es auf stdout aus:
echo "" | openssl s_client -connect $SERVER:$PORT -showcerts | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'

Fingerprint anzeigen

So zeigt openssl den SHA1-Fingerprint eines Zertifikats an:
openssl x509 -noout -fingerprint -in $CERTFILE
Läßt man den -in-Parameter weg, so liest openssl die Daten von stdin; so läßt sich der Befehl an obige Kommandozeile mit einer weiteren Pipe anflanschen.

SSH

ssh hat freundlicherweise für solche Operationen einzelne Tools, so daß man sich nicht durch Berge von Optionen durchwühlen muß...

Zertifikate von Servern einsammeln

Um eine die Zertifikate von einer Liste von Servern einzusammeln, gibt es das Kommandozeilen-Tool ssh-keyscan:
ssh-keyscan host1 [host2...]
Die Ausgabe erfolgt auf stdout in dem Format, das auch die known_hosts-Datei besitzt. Alternativ kann die Liste der Server auch aus einer Datei eingelesen werden. Desweiteren bietet ssh-keyscan auch die Option, die Servernamen in der Ausgabe nur als Hash anzuzeigen.

Fingerprint anzeigen

Bei der Verbindung mit einer noch unbekannten Maschine bekommt man den Fingerprint angezeigt... auf dem Server befindet sich jedoch nur die Public-Key-Datei (typischerweise in /etc/ssh/ssh_host_dsa_key.pub). Möchte man sich für eine solche Public-Key-Datei den Fingerprint berechnen lassen, so kann man dies folgendermaßen tun:
ssh-keygen -l -f $PUBLICKEYFILE

comments powered by Disqus