Die Buchstaben in einer RSA-Erklärung benennen Felder in einem Objekt, nicht Dateien, die ein PKI-Werkzeug aushändigt. Eine Datei mit einem privaten Schlüssel enthält eine Struktur, deren erste Felder öffentlich sind und deren spätere Felder niemals die Maschine verlassen dürfen, die den Tunnel beendet. Zwischen diesen beiden Tatsachen liegen die meisten praktischen Fragen, welche Datei welche Frage beantwortet. Dieses Runbook liest zuerst die Struktur und dann die Befehle, die sie prüfen, ohne sie auszuschütten.

Bestätigen Sie RSA, bevor Sie nach Primzahlen suchen

Ein Zertifikat beweist, dass ein Schlüssel existiert und signiert wurde; es beweist nicht, dass der Schlüssel RSA ist. Systeme können auf elliptischen Kurven oder Ed25519 aufbauen, und dieselbe Verzeichnisstruktur dient allen. Prüfen Sie den Algorithmus, bevor Sie nach Primfaktoren suchen, die nie dort waren.

Diese drei schreibgeschützten Befehle beantworten die Frage und halten die Werkzeugversion fest.

openssl version
openssl x509 -in vpn-client.crt -noout -text
openssl pkey -in vpn-client.key -noout -text

Die Version ist wichtig, weil sich Optionsnamen zwischen Hauptversionen verschoben haben. Suchen Sie in der Zertifikatsausgabe die Zeile zum Public-Key-Algorithmus und die Schlüsselgröße; in der Schlüsselausgabe gibt ein RSA-Schlüssel einen Modul und einen öffentlichen Exponenten aus. Ein Schlüssel auf einer elliptischen Kurve gibt stattdessen eine benannte Kurve aus, und keine Suche wird daraus n oder q erzeugen.

Lesen Sie die Struktur statt des base64

PEM ist base64, in Kopfzeilen gewickelt, und seine Dekodierung ergibt DER, also eine serialisierte Struktur statt einer riesigen ganzen Zahl. RSA-Privatschlüssel reisen in zwei üblichen Containern, PKCS#1 und PKCS#8, und beide lösen sich in dieselbe Zahlenmenge auf.

Im Fall zweier Primzahlen trägt die private Struktur neun Felder: eine Version, den Modul n, den öffentlichen Exponenten e, den privaten Exponenten d, die Primzahlen p und q, zwei CRT-Exponenten und einen CRT-Koeffizienten. RFC 8017 Abschnitt A.1 definiert diese Bestandteile und das ASN.1-Layout, und er erlaubt auch mehr als zwei Primzahlen, weshalb ein allgemeiner Parser zusätzliche Primzahleinträge ausgeben kann. Beachten Sie die Reihenfolge, denn sie erklärt einen häufigen Fehler: Die öffentliche Hälfte liegt in der privaten Datei, daher macht ein öffentliches Feld diese Datei nicht sicher zum Weitergeben. Alles danach ist das Material, das auf dem Host bleiben muss.

Die Kodierung fügt eine Schicht hinzu, die leicht mit dem Inhalt verwechselt wird. openssl asn1parse zeichnet die Struktur als Baum, sodass die Feldreihenfolge sichtbar wird, und es entschlüsselt nichts und sagt auch nicht, ob der Schlüssel brauchbar ist.

Ordnen Sie ein Zertifikat einem Schlüssel zu, ohne den Schlüssel auszugeben

Die nächste Frage ist meist, ob ein Zertifikat und ein Schlüssel zusammengehören. Der Vergleich der Moduln beantwortet sie, kopiert aber auch materialnahe Daten in ein Terminalprotokoll, das in einem Ticket landen kann. Der Vergleich der öffentlichen Hälften beantwortet dieselbe Frage, ohne etwas Sensibles auf dem Bildschirm zu zeigen.

openssl pkey -in vpn-client.key -pubout -out /tmp/key.pub
openssl x509 -in vpn-client.crt -pubkey -noout > /tmp/cert.pub
cmp /tmp/key.pub /tmp/cert.pub && echo MATCH

Identische Dateien bedeuten, dass das Zertifikat die öffentliche Hälfte jenes Schlüssels trägt, und ein Unterschied bedeutet, dass Sie das falsche Paar halten. Diese Nichtübereinstimmung ist die häufigste Ursache für einen Tunnel, der fröhlich aushandelt und dann die Authentifizierung verweigert. Entfernen Sie danach die beiden temporären Dateien; sie enthalten nichts Geheimes, aber ein sauberes Arbeitsverzeichnis lässt sich mitten in einem Vorfall leichter durchdenken.

Wissen, was die Nachbardateien nicht sind

Ein Zertifikat ist kein verschlüsselter öffentlicher Schlüssel, den der Peer mit dem CA-Zertifikat aufschließt; es ist eine signierte Bindung zwischen einem öffentlichen Schlüssel und Identitätsdaten. Der private Signaturschlüssel der CA bleibt getrennt von ihrem eigenen Zertifikat und von jedem Kundenschlüssel. Auch eine Anforderung ist kein Zertifikat: Sie trägt die angefragten Angaben und den öffentlichen Schlüssel mit einer Signatur über die Anforderung, was sie zu einer Anmeldeeingabe statt zu einem Berechtigungsnachweis macht.

FileAnswersDoes not prove
vpn-client.keyPossession of the private keyThat the identity is enrolled
vpn-client.crtA signed binding of public key to identityThat the client holds the matching key
vpn-client.csrThe requested binding and public keyThat access was granted
dh2048.pemGroup parameters for key exchangeAny RSA component
crl.pemRevocation status for certificatesAnything about a private key

Zwei dieser Einträge werden oft genug mit RSA-Parametern verwechselt, um sie zweimal zu nennen. Eine Diffie-Hellman-Parameterdatei enthält Gruppenparameter für die Schlüsseleinrichtung und keine RSA-Primzahlen, obwohl sie ebenfalls als große Primzahl ausgegeben wird. Eine Sperrliste veröffentlicht den Zertifikatsstatus und ist kein Ort, an dem sich ein privater Exponent verstecken könnte.

Jede Inventarzeile sollte daher vier Dinge festhalten: Objekttyp, Eigentümer, Zweck und ob privates Material enthalten ist. Die letzte Spalte entscheidet, wohin die Datei kopiert werden darf, und sie ist die, die Leute überspringen.

Halten Sie die Paarung fest und prüfen Sie dann den Handshake

Bevor Sie etwas ändern, speichern Sie die Prüfausgabe mit Datum und OpenSSL-Version. Eine spätere Rotation lässt sich dann gegen Belege statt gegen Erinnerung vergleichen.

openssl verify -CAfile ca.crt vpn-client.crt
openssl x509 -in vpn-client.crt -noout -subject -issuer -dates

Nach dem Vergleich des öffentlichen Schlüssels üben Sie den Weg, der das Paar verbraucht: Bringen Sie den Tunnel hoch, bestätigen Sie, dass das Zertifikat vorgelegt und akzeptiert wird, und prüfen Sie, welche Identität das Gateway festgehalten hat. Wenn Schlüssel und Zertifikat zusammenpassen und die Authentifizierung trotzdem scheitert, liegt der Fehler in Vertrauen, Identitätszuordnung oder Zugriffsrichtlinie und nicht in der Paarung.

Bewahren Sie für ein Rollback den vorherigen Schlüssel und das Zertifikat in einem datierten Verzeichnis auf und stellen Sie beide zusammen wieder her, nie nur eines von beiden. Ein Schlüssel ohne Zertifikat und ein Zertifikat ohne Schlüssel scheitern von außen gleich, was halb wiederhergestellte Paare um zwei Uhr morgens teuer zu entwirren macht.

Ähnliche Artikel