So extrahieren Sie automatisch ein X.509-Zertifikat aus dem Live-Netzwerkverkehr unter Linux

So extrahieren Sie automatisch ein X.509-Zertifikat aus dem Live-Netzwerkverkehr unter Linux

Ich wäre dankbar, wenn mir jemand zeigen könnte, wie ich während der Handshake-Phase zwischen Client und Server unter Linux automatisch ein X.509-Zertifikat aus dem Live-Netzwerkverkehr extrahieren kann.

Eine ähnliche Frage wurde vor einiger Zeit gestelltExtrahieren von SSL-Zertifikaten aus dem Netzwerk oder PCAP-Dateienaber die Antwort war unvollständig.

Die Antwort lautet, den folgenden Befehl zu verwenden

ssldump -Nr file.pcap | awk 'BEGIN {c=0;} { if ($0 ~ /^[ ]+Certificate$/) {c=1; print "========================================";} if ($0 !~ /^ +/ ) {c=0;} if (c==1) print $0; }'

Aufgrund der Einbindung der PCAP-Datei ist es jedoch für die manuelle Extraktion des Zertifikats vorgesehen.

Kann mir jemand dabei helfen, den obigen Befehl meinen Anforderungen entsprechend zu ändern oder eine andere alternative Methode vorschlagen, um dasselbe zu erreichen?

Antwort1

Versuchen Sie, es gezielt aus einer Paketerfassung zu extrahieren, oder möchten Sie das Zertifikat während des Handshakes einfach von der Befehlszeile abrufen?

Wenn Sie nur das Zertifikat selbst benötigen, können Sie Folgendes tun:

echo | openssl s_client -connect sub.domain.tld:443 | openssl x509 -noout -text

Wenn Sie den Befehl ausführen, ohne eine Weiterleitung an durchzuführen openssl, können Sie viel mehr Details zum Zertifikat sehen, aber der zweite opensslBefehl extrahiert das Zertifikat selbst.

Die echoPipe ist erforderlich, damit die OpenSSL-Shell sauber beendet werden kann, um zu Ihrer Bash-Eingabeaufforderung zurückzukehren.

Dies schreibt natürlich alles auf STDOUT. Wenn Sie das Zertifikat speichern möchten, müssen Sie es auf eine Datei umleiten, indem Sie den Befehl mit beenden > filename.crt. Wenn es Fehler in der Zertifikatskette gibt, landen diese nicht in der Datei, sondern werden auf STDERR geschrieben.

verwandte Informationen