Erzeugen einer PKI mit EasyRSA
Aus OpenVPN Wiki
Inhaltsverzeichnis |
Einleitung
OpenVPN bietet mit EasyRSA eine Scriptsammlung um eine dateibasierte, minimale Zertifizierungsstelle zu generieren. Diese Scriptsammlung liegt dem OpenVPN Source Package sowie den meisten RPMs bei.
Hinweis: In der Windowsversion des Installationspaket liegt nur eine veraltete Version der Sammlung bei. Vor Erzeugung der PKI sollte der easy-rsa Ordner mit dem des Source Package ausgetauscht werden.
Erzeugen der Zertifizierungstelle (CA (Certificate Authority))
vars bzw. vars.bat editieren
Dies ist die vars Datei (mit weniger Kommentaren) unter Linux, bei Windows sieht sie sehr ähnlich aus:
export D=`pwd` export KEY_CONFIG=$D/openssl.cnf export KEY_DIR=$D/keys echo NOTE: when you run ./clean-all, I will be doing a rm -rf on $KEY_DIR export KEY_SIZE=1024 # oder 2048 # folgende Variablen anpassen: export KEY_COUNTRY=KG export KEY_PROVINCE=NA export KEY_CITY=BISHKEK export KEY_ORG="OpenVPN-TEST" export KEY_EMAIL="me@myhost.mydomain" export OPENVPN=openvpn # nötig für easy-rsa 2.0 unter Debian Squeeze
Als nächstes müssen wir unter Windows eine DOS Box öffnen (Start->Ausführen: cmd) und in unser easy-rsa Verzeichnis wechseln (wo die vars.bat) ist. Unter Linux analog eine Shell öffnen und ins easy-rsa Verzeichnis wechseln.
Die vars Datei findet man unter Linux folgendermaßen:
cd / && find -iname vars
Unter Debian 4.0r3 kann EasyRS unter folgendem Pfad gefunden werden: /usr/share/doc/openvpn/examples/easy-rsa/
NUR Windows um configurations Files an die richtige Stelle zu kopieren
auf der DOS Box:
init-config
vars einlesen und die CA initialisieren
In der DOS Box oder Shell die vars bzw. vars.bat Datei ausführen ($ und > sind die Prompts, nicht eintippen):
$ . ./vars
Achtung, das Leerzeichen ist wichtig. Die Datei wird nicht ausgeführt sondern im aktuellen Shellkontext eingelesen.
bzw.
> vars.bat
Damit setzen wir einige Umgebungsvariablen, daher sollten wir die DOS Box oder Shell ab jetzt nicht schließen bevor nicht alle Zertifikate/Dateien erstellt wurden. Sonst muß vars wieder eingelesen werden.
Danach wird die CA initialisiert:
$ ./clean-all
> clean-all.bat
Diesen Vorgang nur einmal ausführen, danach nie wieder!
CA-Key und CA-Cert erzeugen
$ ./build-ca
> build-ca.bat
Beim Common Name (CN) einen einfachen Namen (z.B. MYvpnCA) angeben. Im keys-Verzeichnis liegt nun das Schlüsselpaar der CA. Der Schlüssel ca.key ist auf jedenfall geheim zu halten!
Diffie-Hellman Parameter erzeugen
$ ./build-dh
> build-dh.bat
Diese Datei wird vom OpenVPN Server verwendet um bei vielen gleichzeitugen Clientverbindungen den TLS-Handshake zu beschleunigen.
Erzeugen von Schlüsselpaaren direkt von der CA
Einleitung und Sicherheitshinweise
Sofern ein Zertifikat nachträglich ausgestellt wird, muss das vars-Script erneut ausgeführt werden, bevor die folgenden Befehle ausgeführt werden.
Im Normalfall werden die Schlüsselpaare nicht auf der CA sondern auf den Servern und Clients erzeugt und lediglich von der CA signiert. Siehe auch Public Key Infrastructure. In kleinen Installationen, so wie dieser, kann es jedoch ausreichen, die Schlüsselpaare am CA-Rechner zu erzeugen, zu signieren und schließlich auf die Rechner zu kopieren.
Einen Private-Key sollte man nur über einen sicheren Kanal kopieren. (Gesicherte Verbindung, USB Stick, evtl. LAN)
Erzeugen eines Server-Schlüsselpaars
$ . ./vars $ ./build-key-server server01
bzw.
> vars.bat > build-key-server.bat server01
Als Common Name (CN) ebenfalls server01 angeben. Am besten nie Sonderzeichen, Abstände, ugl. für den CN verwenden.
Hinweis: Das Challenge Password ist nicht relevant und dient in diesem Fall keinem Sicherheitsaspekt. Der Server-Key wird standardmäßig ohne ein Password erzeugt.
Die Dateien ca.crt, server01.crt, server01.key und - falls noch nicht geschehen - die dh1024.pem aus dem keys-Verzeichnis auf die Server-Maschine kopieren.
Achtung: Diese Keys nur für Server verwenden! In den Clients folgende Konfigurationsdirektive ergänzen:
ns-cert-type server
Erzeugen eines Client-Schlüsselpaars (mit Passwort)
$ . ./vars $ ./build-key-pass vpnclient01
bzw.
> vars.bat > build-key-pass.bat vpnclient01
Als Common Name (CN) ebenfalls vpnclient01 angeben. Die Passphrase (nicht Challenge Password) dient der Sicherheit des Private Keys. Sollte man sie vergessen, ist ein Wiederherstellen des Keys nicht mehr möglich!
Hinweis: Organizational Unit Name und Common Name dürfen die gleiche Bezeichnungen haben. Wichtig ist aber, daß diese beim erstellen weiterer Zertifikate unterschiedlich sein müssen! (Organizational Unit Name1 = Common Name1 ungleich Organizational Unit Name2 = Common Name2 ungleich Organizational Unit Name3 = Common Name3 ....)
Die Dateien ca.crt, vpnclient01.crt und vpnclient01.key werden über einen sicheren Kanal auf die Client-Maschine kopiert.
Erzeugen eines Client-Schlüsselpaars (ohne Passwort)
Für das Erzeugen eines Client-Keys ohne Passphrase, einfach build-key statt build-key-pass verwenden. Im allgemeinen ist dies jedoch nicht zu empfehlen.
$ . ./vars $ ./build-key vpnclient01
bzw.
> vars.bat > build-key.bat vpnclient01
Schlüsselübersicht
Hier noch eine kleine Zuordungstabelle, welche Zertifikate wo hinkommen:
| Dateiname | Speicherort | Beschreibung | geheim |
|---|---|---|---|
| ca.crt | Server + Clients | Root CA Zertifikat | Nein |
| ca.key | im Safe :) | Root CA Schlüssel | Ja |
| dh{Wert}.pem | Server | Diffie Hellman | Nein |
| server.crt | Server | Server Zertifikat | Nein |
| server.key | Server | Server Schlüssel | Ja |
| vpnclient01.crt | Client 1 | Client 1 Zertifikat | Nein |
| vpnclient01.key | Client 1 | Client 1 Schlüssel | Ja |
