Gib mir mal schnell den Fingerabdruck deines SSL-Serverzertifikats!

SSL-Zertifikate zu prüfen gehört zur grundlegenden Internethygiene. SSL-Zertifikate dienen dazu, Krypto-Schlüssel auszutauschen, mit der die Kommunikation durch Verschlüsselung vertraulich wird. Die Gefahr besteht jedoch, dass ein Angreifer eigene Schlüssel einschleußt, um die Inhalte der Kommunikation abzuhören – die sogenannte Man-in-the-Middle Attack. Daher stellt sich beim Importieren von Zertifikaten die Frage: Handelt es sich tatsächlich um das Original-Zertifikat?

Erst mit der Gewissheit über stimmige Fingerabdrücke kann ein Spion in der Mitte ausgeschlossen werden. Die Fingerabdrücke sind für diesen Zweck berechnete Prüfsummen, zu denen sich mathematisch schwer – d.h. mit nur sehr hohem und für den Angreifer hoffentlich nicht lohnenden Aufwand – Kollisionen finden lassen. Gängige Browser zeigen diese Prüfsummen nach wenigen Klicks an. Doch wie funktioniert das serverseitig? Wie lassen sich mit OpenSSL die Zertifikatsprüfsummen ausgeben?

Hier die kurze Antwort:

openssl x509 -noout -in cert.pem -fingerprint

Die Datei cert.pem ist dabei die Zertifikatsdatei mit den öffentlichen Schlüsseln auf dem Server, die auf Anfrage an den Client gesendet werden. Von dieser Datei gibt der obige Befehl die Fingerabdrücke aus.

Bei der Überprüfung sollten den früher verwendeten MD5-Prüfsummen nicht mehr vertraut werden. Dieser Algorithmus gilt als gebrochen. Bei MD5 lasen sich Kollisionen mit reduziertem Aufwand konstruieren. Das bedeutet, dass ein Angreifer in der Lage ist, Krypto-Schlüssel zu erzeugen, deren MD5-Prüfsumme mit dem Originalzertifikat übereinstimmen. Dieses Zertifikat anschließend in die Verbindung eingeschleust, führt dazu, dass beim Kommunizieren ein vom Angreifer erzeugter und unbemerkt untergeschobener Schlüssel verwendet wird. Der Angreifer kann daraufhin die übertragenen Daten unbemerkt entschlüsseln.

SHA-1 sollte es mindestens zur Prüfsummenbildung sein.