2009-02-27

VPN Teil I - Zertifikate

Zertifikate mit Easy-RSA

Zielstellung

Unser Ziel ist es, mittels Easy-RSA – einem Scriptzusatz von OpenVPN – eine so genannte PKI (Private Key Infrastructure) zusammenzubauen. Dies umfasst ein Root-Zertifikat, von dem alle validen Unterzertifikate abgeleitet werden. Wir benutzen dies, um ein Zertifikat für unseren Server sowie für einen beliebigen Klienten zu erstellen. In einem weiterführenden Tutorium benutzen wir diese PKI zum aufbauen eines VPN zwischen dem Server und unserem Klienten.

Voraussetzungen für dieses Tutorium sind:

  • OpenVPN und OpenSSL auf einem Linux(/BSD/Unix)-Server installiert zu haben
  • eine funktionierende ‚Bourne Again Shell' (bash) installiert zu haben
  • Der ‚easy-rsax.x'-Ordner aus dem Installationsverzeichnis von OpenVPN muss verfügbar sein; gegebenenfalls OpenVPN in der neusten Version von www.openvpn.net herunterladen

Vorbereitungen

Easy-RSA finden wir als Teil des openvpn-Projektes. Nachdem wir openvpn heruntergeladen haben, wechseln wir in den Unterordner ‚easy-rsax.x'.

Damit wir in den folgenden Schritten unsere Zertifikate mit Standardwerten füllen können und um andere Grundeinstellungen wie z.B. die Bit-Tiefe der Verschlüsselung vorzunehmen, editieren wir zunächst die ‚vars'-Datei. Wichtig sind hierbei folgende Parameter:

  • KEY_DIR: das Verzeichnis für die neu angelegten Schlüssel. Wir einigen uns auf den Standardwert "$EASY_RSA/keys"
  • CA_EXPIRE und KEY_EXPIRE: die Gültigkeitsdauer unserer ‚Certificate Authory' sowie Schlüssel. In unserem Beispiel setzen wir sie auf 10 Jahre, also ‚3650' Tage.
  • Ganz am Ende finden wir eine Reihe von Standardwerten, die in die Schlüssel eingetragen werden (KEY_COUNTRY, KEY_PROVINCE, …). Dies ist der Schritt, der uns während der Erstellung der Zertifikate am meisten Arbeit abnimmt. Für jedes Zertifikat müssten wir sonst jedesmal diese Werte manuell eintragen. Definieren wir hier Standardwerte, brauchen wir diese später nur noch mit der Return-Taste zu quittieren. Wir verwenden in unserem Beispiel folgende Standardwerte:
    • KEY_COUNTRY="DE"
    • KEY_PROVINCE="Sachsen"
    • KEY_CITY="Musterstadt"
    • KEY_ORG="Musterfirma"
    • KEY_EMAIL=me@myhost.mydomain

Um unsere PKI (private key infrastructure) zu initialisieren, führen wir zunächst folgende zwei Befehle in der Shell aus:

  • source ./vars
  • bash clean-all

Mit ersterem übernehmen wir die in ‚vars' gesetzten Standardwerte. Mit letzerem wird unser Zielverzeichnis für die Zertifikate angelegt und geleert, was wichtig ist, wenn noch alte Zertifikate von einem vorherigen Durchlauf bestehen.

Root-Zertifikat

Zunächst brauchen wir ein obergeordnetes Schlüsselpaar für unsere CA (‚Certificate Authory'). Dies erledigt die Ausführung folgendes Scriptes:

  • bash create-ca -pass

Das CA wird erstellt und wir werden während dieses Prozesses nach mehreren Parametern abgefragt. Der erste Parameter ist ein Passwort, welches wir als Option bei dem obigen Kommando gewünscht haben. Somit ist gewährleistet, dass nur mit besitz dieses Passwortes Zertifikate erstellt werden können. Da wir von den restlichen Parametern die meisten mit Standardwerten per ‚vars' vordefiniert haben – die Standardwerte stehen innerhalb der eckigen Klammern – nicken wir diese mit der Return-Taste ab. Lediglich bei ‚Organizational Unit Name' geben wir "UnserPN" und bei ‚Common Name' "UnserPN_CA" ein.


Schritt eins erledigt!


 

Server-Zertifikat

Unser erstes Zertifikat unterhalb des Root-Zertifikat wird ähnlich wie ebendies erstellt. Wirklich wichtig ist diesmal nur der Parameter für ‚Common Name'. Dieser ist später für uns zur Identifizierung des Servers wichtig und sollte bewusst gewählt und gemerkt werden. Um deutlich darauf hingewiesen zu werden, muss man den ‚Common Name' als Parameter für folgendes Script angeben.

  • bash build-key-server UnserPNServer

Wie man sieht, generieren wir das Server-Zertifikat mit dem ‚Common Name' "UnserPNServer". Nun müssen wir nur noch den ‚Organizational Unit Name' explizit eingeben – wir wählen hier und später für die Klienten auch wieder "UnserPN" – sowie zwei Abfragen zur Signierung und Zertifizierung mit "y" bestätigen.


Klient-Zertifikat(e)

Die Klienten-Zertifikate werden fast auf dem gleichen Weg wie das Serverzertifikat gewählt. Nur wählen wir für jeden Klienten einen anderen ‚Common Name' und der Befehl an sich sieht wie folgt aus:

  • bash build-key UnserPNClient1


 

Diffie Hellmann Parameter

Für die sichere Übertragung der Schlüsselinformationen über unsichere Netzwerkabschnitte hinweg benötigt der Server noch den Diffi Hellmann Parameter. Diesen Generieren wir einmalig für unser PKI:

  • bash build-dh

Die Generierung kann je nach Bit-Tiefe sehr lange dauern.


 

Ziel erreicht

Wir haben nun eine komplette PKI mit einem Klienten für den Zugriff auf unseren Server eingerichtet. Weitere Klienten können, wie in Punkt 5 beschrieben, hinzugefügt werden. Sollten wir eine neue PKI aufbauen, müssen wir beachten, dass das ‚keys'-Verzeichnis gelöscht wird, sofern wir in der ‚vars'-Datei kein neues definieren.

Keine Kommentare: