Bei Fehlersuche kann es sehr hilfreich sein, verschlüsselte SSL Verbindungen einzusehen, um die darin liegenden Nachrichten inspizieren zu können. Es gibt einen relativ einfachen Weg, dies mit Wireshark zu realisieren.
Bitte beachten, dass TLS dafür gedacht ist, um Daten vertraulich zu übermitteln. Unterwandert man die von TLS gewährleistete Sicherheit der Daten, erhält man unter Umständen unerlaubt Kenntnis vertraulicher Informationen. Die nachfolgende Anleitung ist lediglich für Lernzwecke in Testumgebungen, in welchem keine vertraulichen Informationen übermittelt werden, gedacht.
Der Datenverkehr kann auf dem Server oder dem verbindenden Client mitgeschnitten werden. Beide Vorgehensweisen werden nachfolgend beschrieben.
Es ist nicht zwangsweise erforderlich, Wireshark auf diesen Systemen zu installieren, da es die Möglichkeit gibt, den Datenverkehr mit Windows-Bordmitteln auszuwerten und anschließend in ein Wireshark-kompatibles Format für die Analyse auf einem Techniker-Computer umzuwandeln. Siehe Artikel "Netzwerkprobleme mit Wireshark analysieren, ohne Software auf produktiven Systemen installieren zu müssen".
Entschlüsseln des TLS-Datenverkehrs auf dem Client
Sehr praktisch ist es, den Datenverlehr auf dem Client mitzuschneiden, da hier direkt eine Verbindung mit dem (Pre)Master Key und Wireshark hergestellt und somit "Live" mitgeschnitten werden kann. Ebenfalls ist diese Methode "minimalinvasiv", es müssen keine systemweiten Veränderungen vorgenommen werden.
Leider funktioniert diese Methode jedoch nur mit gängigen Browsern.
Kennen Sie TameMyCerts? TameMyCerts ist ein Add-On für die Microsoft Zertifizierungsstelle (Active Directory Certificate Services). Es erweitert die Funktion der Zertifizierungsstelle und ermöglicht die Anwendung von Regelwerken, um die sichere Automatisierung von Zertifikat-Ausstellungen zu realisieren. TameMyCerts ist einzigartig im Microsoft-Ökosystem, hat sich bereits in unzähligen Unternehmen auf der ganzen Welt bewährt und steht unter einer freien Lizenz. Es kann über GitHub heruntergeladen und kostenlos verwendet werden. Professionelle Wartung wird ebenfalls angeboten.
(Pre)Master Secret speichern
Mozilla Firefox, Google Chrome und der darauf basierende Microsoft Edge (Codename Anaheim) sind in der Lage, eine Umgebungsvariable auszulesen, welche den Browser anweist, die (Pre)Master Secrets abzuspeichern.
Hierfür muss zunächst der Eigenschaften-Dialog des Computers geöffnet werden. In der Karteikarte "Advanced" wird auf "Environment Variables" geklickt.
Im folgenden Dialog wird für den aktuellen Benutzer mit Klick auf "New" eine neue Umgebungsvariable angelegt.
Es wird nun die Variable "SSLKEYLOGFILE" erzeugt und der Pfad festgelegt, in welchen die Schlüssel gespeichert werden sollen.
Wireshark konfigurieren
Im Einstellungs-Dialog von Wireshark wird zu "Protocols" – "TLS" navigiert und der zuvor definierte Pfad hinterlegt.
Anschließend kann das Problem reproduziert werden. Man sollte nun sehen, dass die Nachrichten entschlüsselt werden und somit der in der SSL/TLS Verbindung übertragene HTTP-Datenverkehr sichtbar sein.
Nicht mehr verwenden: Entschlüsseln mittels privatem Schlüssel des Webservers
Früher war es meist auch möglich, SSL-Datenverkehr unter Angabe des privaten Schlüssels des Web Servers zu entschlüsseln.
Mit der weiten Verbreitung durch Perfect Forward Encryption (PFE) ist dieses aber nicht mehr möglich, da PFE die Entschlüsselung mit dem Server-Schlüssel unmöglich macht. Dies ist eine sinnvolle Funktion in Hinsicht auf den Datenschutz, erfordert zwecks Fehlersuche nun jedoch eine neue Herangehensweise.
Versucht man es dennoch, wird man im "TLS debug file" von Wireshark eine entsprechende Fehlermeldung vorfinden:
ssl_decrypt_pre_master_secret: session uses Diffie-Hellman key exchange (cipher suite 0xC030 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) and cannot be decrypted using a RSA private key file. ssl_generate_pre_master_secret: can't decrypt pre-master secret
Sollte es wirklich erforderlich sein, den TLS-Datenverkehr mit dem privaten Schlüssel des Webservers zu entschlüsseln, wird nachfolgend beschrieben, wie man die Forward Encryption serverseitig deaktiviert.
Entschlüsseln des TLS-Datenverkehrs auf dem Server (Microsoft IIS)
Das Entschlüsseln des TLS-Datenverkehrs auf dem Server ist etwas aufwändiger und erfordert tiefgreifende Veränderungen am System.
Im nachfolgenden reduzieren wir die Sicherheitseinstellungen auf dem Server, um den Datenverkehr analysieren zu können. Dies sollte niemals auf einem Produktivsystem vorgenommen werden. Die vorgenommenen Änderungen sollten nach erfolgter Analyse und Fehlersuche wieder rückgängig gemacht werden.
Der Vorgang besteht grob aus folgenden Schritten:
- Diffie Hellman Schlüsselaustauschverfahren deaktivieren
- Ein SSL-Zertifikat mit exportierbarem Schlüssel beantragen und installieren
- TLS 1.3 deaktivieren
- Datenverkehr mitschneiden
Diffie Hellman Schlüsselaustauschverfahren deaktivieren
Um den TLS-Datenverkehr entschlüsseln zu können, müssen wir alle Schlüsselaustauschverfahren deaktivieren, die Forward Encryption ermöglichen. Dies wird auf Windows Systemen systemweit vorgenommen. Ein einfach zu verwendendes Werkzeug ist IIS Crypto der Firma Nartac Software.
Es werden die Schlüsselaustauschverfahren "Diffie Hellman" und "ECDH" (Elliptic Curve Diffie Hellman) deaktiviert. Anschließend ist ein Neustart des Server-Betriebssystems erforderlich.
Ein SSL-Zertifikat mit exportierbarem Schlüssel beantragen und installieren
Um den Datenverkehr entschlüsseln zu können, muss Wireshark über den privaten Schlüssel des Webservers verfügen. Daher muss auf dem IIS-Webserver ein TLS-Zertifikat mit exportierbarem privatem Schlüssel vorliegen.
Sollte das aktuell installierte Webserver-Zertifikat nicht über einen exportierbaren Schlüssel verfügen, muss somit ein neues Zertifikat beantragt werden. Während der Beantragung des Zertifikats kann angegeben werden, dass der private Schlüssel exportierbar sein soll.
Siehe hierzu auch Artikel "Wie sicher ist die Einstellung "Allow private key to be exported" in den Zertifikatvorlagen?".
Nach der Beantragung kann das Webserver-Zertifikat nun mitsamt privatem Schlüssel in eine PFX-Datei exportiert werden.
Das neue Zertifikat kann anschließend in der SSL-Bindung auf dem Webserver eingerichtet werden.
TLS 1.3 deaktivieren
Wird Windows Server 2022 oder neuer eingesetzt, wird TLS 1.3 unterstützt. Um den Datenverkehr entschlüsseln zu können, müssen wir dies für den Zeitraum der Analyse deaktivieren. Dies erfolgt ebenfalls in der Konfiguration der SSL-Bindung für unsere Website.
Datenverkehr mitschneiden
Die zuvor erzeugte PFX-Datei kann nun in Wireshark eingebunden werden. Dies erfolgt im Einstellungs-Dialog unter "Protocols" – "TLS".
Die IP-Adressen können entweder explizit angegeben werden, oder durch die Angabe von "any" auf den gesamten mitgeschnittenen Datenverkehr angewendet werden. Als Protokoll muss unbedingt "http" angegeben werden.
Nun kann der TLS-Datenverkehr mitgeschnitten werden. Der Datenverkehr sollte nun im Klartext sichtbar sein.
Weiterführende Links:
Externe Quellen
- Decrypting SSL/TLS sessions with Wireshark – Reloaded (Microsoft)
- Transport Layer Security (TLS) (Wireshark)
- How to Decrypt SSL with Wireshark – HTTPS Decryption Guide (Comparitech)
- Browser-SSL entschlüsselt (Heise)
- NSS Key Log Format (Mozilla)
- Walkthrough: Decrypt SSL/TLS traffic (HTTPS and HTTP/2) in Wireshark (Sheng Jiang)
Ein Gedanke zu „TLS-Datenverkehr mit Wireshark inspizieren (HTTPS entschlüsseln)“
Kommentare sind geschlossen.