Zwei Client-Zertifikate mit unterschiedlichen Seriennummern, unterschiedlichen Schlüsseln und sogar unterschiedlichen vollständigen Subjekten können dennoch auf dieselbe Richtliniendatei hinauslaufen, weil der Server nichts davon prüft. Er liest einen Namen aus dem Zertifikat und öffnet die passende Client-Konfigurationsdatei. Tragen beide Zertifikate denselben Namen, erbt das zweite die Richtlinie des ersten in dem Moment, in dem es sich verbindet.

Die Kollision entsteht bei der Registrierung und wird erst beim Verbindungsaufbau entdeckt, meist wenn ein Gerät eine Adresse oder einen Routensatz erhält, der zu einer anderen Maschine gehört. Vorbeugung bedeutet, sich darauf zu einigen, welches Feld der Server abbildet, und diesen Wert dann zu reservieren, bevor irgendetwas signiert wird.

Ihre Zertifikatswerkzeuge warnen Sie nicht, weil Eindeutigkeit innerhalb von X.509 und Eindeutigkeit eines OpenVPN-Richtliniennamens unterschiedliche Anforderungen sind, die von unterschiedlichen Systemen durchgesetzt werden.

Der Server sucht einen Namen, keinen Fingerabdruck

Bei der üblichen zertifikatsbasierten Zuordnung entnimmt der Server den Common Name aus dem vorgelegten Zertifikat und sucht eine Datei dieses Namens in seinem Client-Konfigurationsverzeichnis. Diese Datei kann eine statische Adresse festlegen, Routen pushen oder Firewall-Markierungen pro Client anwenden. Die Suche ist ein Zeichenkettenabgleich mit einem Dateinamen, daher zählen Groß- und Kleinschreibung, Leerzeichen und Satzzeichen.

Manche Bereitstellungen tauschen die Zuordnung bewusst, sodass ein authentifizierter Benutzername den Common Name übernimmt, und dann muss der Benutzername eindeutig sein. So oder so ist der Wert, der die Richtlinie auswählt, der Wert, den Sie reservieren. Entscheiden Sie vor der Ausgabe, welcher es ist; Raten nach einer Kollision kostet mehr als Fragen.

Wo zwei Behörden auf denselben Namen treffen

Eine Organisation, die Zertifikate von mehr als einer ausstellenden Behörde akzeptiert, betreibt zwei unabhängige Registrierungsprozesse, die in einen Namensraum schreiben. Die eigenen Eindeutigkeitsregeln jeder Behörde gelten in ihr selbst, sodass beide rechtmäßig für denselben Common Name ausstellen können, ohne dass eine etwas Falsches bemerkt.

Seriennummern helfen nicht. X.509 verlangt, dass eine Seriennummer innerhalb des Bereichs ihres Ausstellers eindeutig ist, was eine Eigenschaft der Buchführung dieser Behörde ist und keine globale Geräteidentität. Eine Subjektprüfung ist auch ein anderer Test als eine Common-Name-Prüfung: Zwei Zertifikate können ein CN teilen und sich dennoch in der Organisationseinheit unterscheiden und daher verschiedene Subjekte tragen. Jede dieser Eigenschaften kann zutreffen, während der Server beide Zertifikate dennoch auf einen Dateinamen abbildet.

Die OpenSSL-CA-Dokumentation behandelt die Einstellung unique_subject, die die Meinung der eigenen Datenbank steuert, und der ehrliche Ausgangspunkt ist, Ihre ausstellende Konfiguration zu lesen, statt anzunehmen, dass ein bestimmter EasyRSA- oder OpenSSL-Standard gilt.

Reservieren Sie den effektiven Namen vor der Signatur

Führen Sie ein Register, das ein Gerät seinem genehmigten Datensatz und von dort einem exakten Richtliniendateinamen zuordnet, sodass ein Name einmal vergeben wird und vergeben bleibt. Die Reservierung muss atomar sein, was in der Praxis eine Datenbankbedingung oder eine Sperre um den Schritt Vergeben-dann-Signieren bedeutet, nicht eine Tabelle, die zwei Personen bearbeiten.

Machen Sie die Prüfung dann zum Teil der Ausgabe: Verweigern Sie die Signatur, wenn der angeforderte Name bereits existiert, und beziehen Sie jede Behörde ein, der der Server vertraut, denn ein von der anderen Behörde reservierter Name ist ebenso belegt. Eine abgelehnte Anfrage mit klarem Grund ist billiger als ein Ticket über ein Gerät, das immer wieder die statische Adresse eines anderen erhält.

Erneuerung verwendet einen Namen absichtlich wieder

Die Neuausstellung für ein bestehendes Gerät sollte eine neue Seriennummer unter demselben Richtliniennamen erzeugen, und das ist legitime Wiederverwendung und keine Kollision. Was im Voraus entschieden werden muss, ist die Überschneidung: ob altes und neues Zertifikat gleichzeitig gültig sein dürfen und wie die alte Anmeldeinformation außer Betrieb genommen wird.

Greifen Sie nicht zu duplicate-cn, um das zu lösen. Diese Serveroption regelt gleichzeitige Verbindungen, die denselben Namen vorlegen; sie sperrt die Registrierung nicht, und ihr Aktivieren macht eine gemeinsam genutzte statische Adresse nicht für zwei Maschinen gleichzeitig sicher. Widerruf identifiziert ein Zertifikat normalerweise über Aussteller und Seriennummer, sodass das Außerbetriebnehmen der alten Anmeldeinformation nicht deren Ersatz ungültig machen muss, solange der Server die richtigen Widerrufsdaten erhält und durchsetzt.

Bestätigen Sie die Zuordnung mit den Werkzeugen auf der Maschine

Bevor Sie einem Gerät seine neue Anmeldeinformation übergeben, lesen Sie den Namen so aus dem Zertifikat, wie es der Server tun wird, und vergleichen Sie ihn dann mit der Richtliniendatei, die Sie ausgewählt erwarten.

openssl x509 -in device42.crt -noout -subject -nameopt sep_multiline
ls -l /etc/openvpn/ccd/device42
grep -n "duplicate-cn" /etc/openvpn/server.conf

Der erste Befehl gibt Subjektfelder getrennt aus, wodurch eine verirrte Organisationseinheit oder ein doppeltes Leerzeichen sofort sichtbar wird. Der zweite bestätigt, dass eine Richtliniendatei unter genau diesem Namen existiert, und der dritte zeigt, ob der Server so konfiguriert ist, dass er mehrere Sitzungen auf einem Namen zulässt. Führen Sie alle drei an einem frischen Zertifikat aus, bevor es den Registrierungsschritt verlässt, solange ein Fehler noch eine Signatur statt eines Vorfalls kostet. Bewahren Sie die Ausgabe beim Ticket auf, damit die nächste Person sieht, welchen Namen der Server tatsächlich erhalten hat.

Schließen Sie mit einer echten Verbindung ab und vergleichen Sie die zugewiesene Adresse und die gepushten Routen mit der Richtliniendatei statt mit dem, was Sie schreiben wollten. Wenn zwei Geräte dieselbe statische Adresse melden, hat das Register eine Kollision, die keine Zertifikatsprüfung je aufdecken wird.

Ähnliche Artikel