So prüfen Sie einen VPN-Zertifikatsfingerabdruck über einen zweiten Kanal
Ein Fingerabdruck beweist Identität nur, wenn der erwartete Wert über einen Kanal kommt, den der Angreifer nicht kontrolliert. Führen Sie die Prüfung in dieser Reihenfolge aus.
Ein Fingerabdruck ist nur so gut wie der Kanal, der Ihnen den erwarteten Wert genannt hat. Wenn der Wert, mit dem Sie vergleichen, über dieselbe Verbindung kam, die Sie gerade prüfen, beweist der Vergleich nichts außer der Tatsache, dass wer auch immer diese Verbindung kontrolliert, beständig ist. Die Prüfung muss in einer festen Reihenfolge ablaufen, und ein fehlgeschlagener Schritt sollte Sie stoppen, statt Sie zum nächsten zu drängen. Hier ist die Reihenfolge, die ich verwende, wenn ein VPN-Client meldet, dass sich ein Zertifikat geändert hat.
Benennen Sie zuerst das Objekt, dann den Wert
Entscheiden Sie, ob der erwartete Wert zum Endzertifikat des Servers, zur ausstellenden CA oder zum öffentlichen Schlüssel im Endzertifikat gehört. Das sind drei verschiedene Prüfungen, und sie scheitern auf unterschiedliche Weise. Ein passender CA-Fingerabdruck bindet nicht den Server, und ein Hash des öffentlichen Schlüssels übersteht bewusst eine Neuausstellung, die denselben Schlüssel behält.
Notieren Sie auch den Algorithmus. SHA-256 ist heute die normale Erwartung, aber ältere Werkzeuge gaben SHA-1 aus, sofern Sie nichts anderes verlangten, und ein 40-stelliger Hex-Wert ist ein Zeichen dafür, dass Sie gerade zwei verschiedene Dinge vergleichen werden.
Holen Sie den erwarteten Wert über einen zweiten Kanal
Der zweite Kanal muss einer sein, in den die Partei, gegen die Sie sich absichern, nicht schreiben kann. Ein Bereitstellungssystem, bei dem Sie sich bereits authentifizieren, ein gedruckter Eintrag in einem Safe, eine Konfigurationsdatenbank oder ein signiertes Dokument, das ein anderer Prozess zustellt, kommen alle infrage. Eine Chatnachricht von einer Kollegin, eine über ein Suchergebnis erreichte Supportseite und alles, was in das Terminal eingefügt wird, in dem Sie ohnehin gerade debuggen, kommen nicht infrage.
Verlangen Sie den vollständigen Wert und den Algorithmus, niemals ein Präfix. Doppelpunkte und Groß- oder Kleinschreibung spielen keine Rolle, aber eine Kürzung macht aus einer 256-Bit-Prüfung ein Ratespiel.
Wenn niemand den erwarteten Wert aus einer unabhängigen Quelle liefern kann, lautet das ehrliche Ergebnis, dass dieses Zertifikat heute nicht überprüft werden kann. Das zu sagen ist besser, als einfach das zu pinnen, was der Client gerade angezeigt hat, was aus einer Warnung eine Gewohnheit macht.
Ermitteln Sie den Wert auf Ihrer Seite
Bei einer Zertifikatsdatei lautet der Befehl openssl x509 -in server.crt -noout -fingerprint -sha256. Der ausdrückliche Digest ist wichtig: Ohne ihn hängt die Ausgabe von Ihrer OpenSSL-Version ab. Das Ergebnis ist eine doppelpunktgetrennte Hex-Zeichenkette, also entfernen Sie die Doppelpunkte und schreiben Sie beide Seiten klein, bevor Sie vergleichen.
Bei einem Endpunkt, der direkt TLS spricht, verbinden Sie sich und leiten das Zertifikat heraus: openssl s_client -connect vpn.example.com:443 -servername vpn.example.com < /dev/null | openssl x509 -noout -fingerprint -sha256. Das funktioniert für ein Web-Adminpanel oder einen TLS-Listener, nicht für OpenVPN, dessen Steuerkanal im Tunnel liegt. Für OpenVPN lesen Sie das Zertifikat stattdessen aus dem Profil auf der Platte, statt zu versuchen, es vom Socket abzugreifen.
Der Vergleich sollte mechanisch erfolgen. Normalisieren Sie beide Werte mit tr -d ':' und einer Kleinschreibung, dann vergleichen Sie die ganze Zeichenkette. Von Auge zu vergleichen ist der Weg, auf dem ein passendes Präfix eine Abweichung im letzten Byte verdeckt. Wenn die Zeichenketten sich unterscheiden, behandeln Sie den Unterschied als real, bevor Sie nach einer Erklärung suchen.
Abbruchbedingungen
Brechen Sie ab, wenn das Objekt abweicht, denn ein CA-Fingerabdruck kann kein Endzertifikat entlasten und ein Endzertifikat nicht die CA. Brechen Sie ab, wenn der Algorithmus abweicht, denn ein SHA-1-Wert gegen einen SHA-256-Wert sagt Ihnen nichts. Brechen Sie ab, wenn der Fingerabdruck passt, das Zertifikat aber abgelaufen, widerrufen oder auf einen anderen Namen ausgestellt ist; ein passender Hash ist keine Gültigkeitsprüfung und repariert keine kaputte Kette. Brechen Sie ebenso ab, wenn die Seriennummer nicht mit der Seriennummer im Datensatz übereinstimmt, gegen den Sie prüfen, denn das ist der billigste Weg, ein untergeschobenes Zertifikat zu erkennen.
Brechen Sie ab, wenn der neue Wert über den Kanal kam, den Sie gerade geprüft haben. Eine Rotation kann einen Fingerabdruck legitim ändern, aber der Ersatzwert muss trotzdem aus dem vertrauenswürdigen Prozess kommen, nicht aus dem Warndialog, der die Frage ausgelöst hat.
Brechen Sie ab, wenn der vorgeschlagene Fix darin besteht, die Hostnamen- oder Kettenprüfung zu deaktivieren. Ein Fingerabdruck fügt den normalen Prüfungen eine Bedingung hinzu; er ersetzt sie nicht, es sei denn, die Bereitstellung hat bewusst ein reines Pin-Modell gewählt, und diese Wahl bringt eigene Betriebskosten mit sich.
Nach dem Vergleich
Halten Sie fest, was Sie verglichen haben, woher der erwartete Wert kam und wann. Wurde das Zertifikat neu ausgestellt, aktualisieren Sie die gespeicherte Erwartung über denselben vertrauenswürdigen Kanal und notieren Sie die neue Seriennummer, denn die Seriennummer ist es, die die nächste Rotation nachvollziehbar macht.
Seien Sie sich dann über die Grenzen im Klaren. Ein Fingerabdruck bestätigt, dass das Zertifikat, das Sie haben, dasjenige ist, das Ihnen jemand als erwartet genannt hat. Er sagt nichts darüber, ob der Host unkompromittiert ist, und nichts darüber, ob der Dienst protokolliert oder einschränkt, was dieses Zertifikat erreichen kann.