DH-Datei oder tls-auth-Schlüssel? Zwei OpenVPN-Dateien unterscheiden
Die eine Datei enthält öffentliche Gruppenparameter, die andere gemeinsames geheimes Material. Drei Bedingungen entscheiden, zu welcher Direktive jede gehört.
Zwei Dateien, zwei Direktiven und die Angewohnheit, beide nach dem zu benennen, was sie konfigurieren. So landet dh.pem in einer tls-auth-Zeile, und der Client scheitert mit einer Meldung über ein unerwartetes Schlüsselformat. Die Entscheidung vor Ihnen ist nicht, welche Datei stärker ist. Sie lautet, welche Rolle das Deployment tatsächlich braucht, und drei Bedingungen klären das: welchen Schlüsselaustausch Ihr TLS-Stack aushandeln wird, ob Sie überhaupt eine Authentifizierung des Steuerkanals wollen und ob das Material geheim bleiben muss.
Beantworten Sie sie der Reihe nach, und die Dateifrage beantwortet sich selbst. Lassen Sie sie aus, und die Direktivennamen beginnen austauschbar zu wirken, was genau der Zustand ist, aus dem der Fehler entsteht.
Lesen Sie das Label vor dem Dateinamen
Die erste Zeile der Datei sagt mehr aus als ihr Name, denn ein Name ist eine menschliche Konvention, und das Label erzeugt das Werkzeug. Diffie-Hellman-Parameter tragen ein PEM-Label BEGIN DH PARAMETERS. Ein statischer OpenVPN-Schlüssel ist eine völlig andere Struktur mit eigenem Kopf und Hexadezimal-Nutzlast.
Umbenennen wandelt nichts um. Eine Parameterdatei namens ta.key bleibt Parameter, und ein statischer Schlüssel namens dh.pem bleibt ein statischer Schlüssel; der Parser liest den Inhalt und weist die Unstimmigkeit zurück. Prüfen Sie, bevor Sie das Profil bearbeiten:
head -n 1 dh.pem
head -n 1 ta.keyDrei Bedingungen, die entscheiden, welche Datei Sie brauchen
Die erste Bedingung ist der Austausch. Ein Diffie-Hellman-Handshake über ein endliches Feld braucht eine Gruppe, und die Direktive dh ist der Ort, an dem der Server die Parameter dafür benennt. Ein Handshake über eine elliptische Kurve braucht diese Datei überhaupt nicht, weil die Kurve die Parametermenge ist. Wenn Ihr Server nur ECDHE-Suites aushandelt, ist eine DH-Datei totes Gewicht statt zusätzlicher Stärke.
Die zweite Bedingung ist die Authentifizierung des Steuerkanals, eine eigene Funktion mit eigenem Material. Eine tls-auth-Datei ist ein gemeinsamer statischer Schlüssel, den beide Peers halten, und wird verwendet, um Steuerkanalpakete zu signieren, damit ein nicht authentifizierter Peer den Handshake nicht einmal abschließen kann. Sie existiert unabhängig davon, ob Sie DH über ein endliches Feld verwenden, und hat nichts mit den Gruppenparametern zu tun.
Die dritte Bedingung sind Geheimhaltung und Verteilung. DH-Parameter dürfen veröffentlicht werden, ohne die Sitzung zu schwächen, weil die geheimen Werte pro Handshake erzeugt werden und die Peers nie verlassen. Ein statischer Schlüssel darf nicht veröffentlicht werden: Er ist an beiden Enden dieselben Bytes, rotiert nicht von selbst, und wer ihn hält, kann gültige Signaturen für den Steuerkanal erzeugen. Diese beiden Antworten führen zu völlig unterschiedlichen Umgangsregeln, weshalb eine Datei in einem Repository liegen kann und die andere nicht.
Erzeugen Sie das richtige Material für jede Rolle
Verwenden Sie das Werkzeug, das das von der Direktive erwartete Format erzeugt, statt zwischen ihnen umzuwandeln. Für den gemeinsamen Schlüssel unter OpenVPN 2.6 nennt die typisierte Form des Generators den Zweck ausdrücklich.
openvpn --genkey tls-auth ta.keyDieser Befehl erzeugt neues geheimes Material; er repariert oder prüft keinen vorhandenen Schlüssel, und ein erneuter Lauf liefert einen anderen Schlüssel, den die anderen Peers nicht haben. Kopieren Sie die entstehende Datei über einen Kanal, den Sie für jedes gemeinsame Geheimnis nutzen würden, zu den Peers, die sie brauchen, und halten Sie die Richtungskonvention konsistent: Mit tls-auth verwendet eine Seite key-direction 0 und die andere key-direction 1.
DH-Parameter stammen, wenn Sie sie brauchen, aus der Parametererzeugung und nicht aus einem Schlüsselgenerator, und ihre Herkunft zählt, auch wenn die Ausgabe öffentlich ist. Eine Gruppe aus unbekannter Quelle wird nicht dadurch vertrauenswürdig, dass sie öffentlich ist; sie muss weiterhin eine Gruppe sein, auf die sich Ihre Peers einigen, und eine, die nicht durch Größe oder Konstruktion geschwächt ist.
Was dh none bedeutet und was nicht
dh none ist eine echte Direktive mit enger Bedeutung: Es wird keine Parameterdatei für endliche Felder geladen, weil der Handshake Diffie-Hellman über eine elliptische Kurve verwendet. Sie ist keine Kurzform für „den DH-Schritt überspringen“ im Sinne einer Schwächung und sagt OpenVPN gewiss nicht, eine andere Datei als Ersatz zu akzeptieren.
Aus dem falschen Lesen folgen zwei Fehler. Der erste ist die Annahme, dh none beseitige die Notwendigkeit von tls-auth, obwohl die beiden Unterschiedliches steuern. Der zweite ist, eine veraltete dh-Zeile neben einer reinen Kurvenkonfiguration zu behalten und sich dann zu fragen, welche Datei der Server tatsächlich verwendet; ist die Direktive vorhanden, wird die Datei gelesen, und ein defekter Pfad dort lässt den Start aus einem Grund scheitern, der nichts mit dem auszuhandelnden Austausch zu tun hat.
Wenn die falsche Datei bereits ausgerollt wurde
Stellen Sie das beabsichtigte Geheimnis vom Profileigentümer wieder her und lassen Sie die Zertifikatsprüfung dabei in Ruhe. Der Fehler ist eine Formatabweichung, kein Vertrauensfehler, und die Prüfung abzuschalten, um den Fehler zu umgehen, ersetzt ein Startproblem durch ein stilles.
Trennen Sie dann die beiden Vorfälle, die Menschen gern zusammenwerfen. Das Veröffentlichen einer DH-Parameterdatei ist nahezu harmlos, weil die Parameter konstruktionsbedingt öffentlich waren. Das Offenlegen des tls-auth-Schlüssels ist ein anderes Ereignis: Der Schlüssel authentifiziert Steuerkanalpakete für jeden Peer, der ihn hält, also muss der Austausch über das gesamte Deployment koordiniert werden statt auf einem Host angewendet.
Eine Prüfung von fünf Minuten klärt, welchen Fall Sie haben: Lesen Sie die erste Zeile jeder Datei, bestätigen Sie die Direktive, die darauf verweist, und bestätigen Sie, dass die Verteilung der Datei dem entspricht, was das Material verlangt. Das ist weniger Arbeit, als eine funktionierende PKI neu zu erzeugen, und genau darauf zielten die drei Bedingungen die ganze Zeit.