Zertifikate für OpenVPN erzeugen

OpenVPN ist eine OpenSource Software zum Aufbau eines VPN (Virtual Private Network). Ein VPN Tunnel wird genutzt, um eine Punkt zu Punkt Verbindung zu verschlüsseln, damit der Datenverkehr von dritten nicht mitgelesen werden kann. Ein gutes Beispiel sind Public Hotspots. Jeder kann sich im Urlaub in einer Strandbar mit dem hiesigen WLAN verbinden, um seine Mails zu lesen oder seinen Kontostand abzufragen. Wer jedoch in solchen unverschlüsselten WLANs mit lauscht kann erst mal niemand sagen. Gehen wird also generell mal vom schlimmsten aus. Wird die Public Hotspot Verbindung jedoch nur für den Aufbau des VPN Tunnels verwendet, geht der komplette Traffic über diesen Tunnel und ist nicht mehr auswertbar (vorausgesetzt die privaten Schlüssel bleiben geheim).

Dies ist der erste von vermutlich drei Beiträgen zum Thema OpenVPN und soll sich mit der Erzeugung der benötigen OpenVPN Zertifikate befassen. OpenVPN ist für die Betriebssysteme Linux, Unix, OSX und Windows verfügbar. Clients für alle gängigen Mobile Devices sind in den jeweiligen AppStores verfügbar. Aufgrund des größeren Marktanteils von Windows werde ich den Fokus in diesem Beitrag drauf legen. Die Umsetzung unter Linux ist jedoch sehr ähnlich. Jedem, der die Möglichkeit hat die OpenVPN Zertifikate unter Linux zu erzeugen, würde ich das empfehlen zu tun, da Linux durchaus vertrauenswürdiger ist.
OpenVPN benötigt folgende Voraussetzungen:

  • Zertifikate zur Authentifizierung und zum Verschlüsseln des Traffics
  • OpenVPN Server
  • Konfigurierter Client

Die OpenVPN Zertifikate werden mit Easy-RSA erstellt. Das ist eine Ansammlung von bereitgestellten Skripten, welche die Arbeit erledigen. Die aktuellste Version steht auf Github zur Verfügung . Klick Zusätzlich wird dann noch OpenSSL benötigt, um die Zertifikate überhaupt erzeugen zu können. Klick Alternativ kann auch das komplette OpenVPN Client Paket installiert werden. Hier sind die OpenSSL Binaries und die Easy-RSA Skripte bereits enthalten. Klick Die Skripte liegen dann im Verzeichnis „%ProgramFiles%\OpenVPN\easy-rsa“. Dort muss als erstes die Datei vars.bat.sample angepasst werden.

  • set HOME=%ProgramFiles%\OpenVPN\easy-rsa

Hier wird das Verzeichnis angegeben, indem die Easy-RSA Skripte liegen. Änderungen sind nur erforderlich, wenn die Easy-RSA Skripte bei Github heruntergeladen wurden.

  • set KEY_DIR=keys

In diesem Verzeichnis werden die erstellten OpenVPN Zertifikate gespeichert. Das Verzeichnis muss bereits vorhanden sein.

  • set KEY_SIZE=1024

Hier sollte der Wert definitiv erhöht werden. Wer erst mal Ruhe haben will ändert den Wert auf 4096.

  • set KEY_COUNTRY=US
  • set KEY_PROVINCE=CA
  • set KEY_CITY=SanFrancisco
  • set KEY_ORG=OpenVPN
  • set KEY_EMAIL=mail@host.domain
  • set KEY_CN=changeme
  • set KEY_NAME=changeme
  • set KEY_OU=changeme
  • set PKCS11_MODULE_PATH=changeme
  • set PKCS11_PIN=1234

Kann durch folgenden Block ersetzt werden. Die Werte müssen natürlich an die eigenen Gegebenheiten angepasst werden.

  • set KEY_COUNTRY=DE
  • set KEY_PROVINCE=Bavaria
  • set KEY_CITY=Munich
  • set KEY_ORG=OpenVPN
  • set KEY_EMAIL=your@mailadress.foo
  • set KEY_NAME=OpenVPN

Um den Hash Algorithmus von SHA1 auf SHA512 zu ändern, wird der Parameter „default_md” in der Datei „openssl-1.0.0.cnf“ angepasst.

  • default_md = sha512 # use public key default MD

Zu guter Letzt gibt es noch eine optionale Anpassung um das Client Zertifikat zusätzlich zu schützen. Out of the Box reicht es, sich mit einem Zertifikat am Server zu authentifizieren. Der private Key des Zertifikats lässt sich mit einem eigenen Passwort verschlüsseln, welches bei jeder Nutzung des Zertifikats abgefragt wird. Sollte der Schlüssel mal nicht mehr unter eigener Kontrolle sein, besteht noch der zusätzliche Schutz des Passworts. Für das zurückzuziehen/revoken des Zertifikats ist dann nicht mehr allerhöchste Eile geboten. Wer also einen zusätzlichen Passwortschutz möchte, kopiert am besten die Datei „build-key.bat“ um ein Backup des originalen Skripts zu haben.
Im ersten openssl Befehl muss der Parameter „-nodes“ entfernt werden.
Vorher:

  • openssl req -days 3650 -nodes -new -keyout %KEY_DIR%\%1.key -out %KEY_DIR%\%1.csr -config %KEY_CONFIG%

Nachher:

  • openssl req -days 3650 -new -keyout %KEY_DIR%\%1.key -out %KEY_DIR%\%1.csr -config %KEY_CONFIG%

Die Passwortabfrage kommt dann beim Ausführen des Skripts. Nachdem alle erforderlichen Anpassungen abgeschlossen sind, können die OpenVPN Zertifikate erstellt werden. Da Zertifikate eine sensible Angelegenheit sind, sollten diese unbedingt auf einem sicheren und absolut vertrauenswürdigen Gerät erzeugt werden. Wer sich nicht sicher ist, kann sich für solche Zwecke eine abgeschottete VM installieren oder gleich auf Linux wechseln. Die Vorgehensweise zum Erstellen der OpenVPN Zertifikate ist sehr gut in der Datei „README.txt“ beschrieben.

 Extract all zip'd files to the OpenVPN home directory,
 including the openssl.cnf file from the top-level
 "easy-rsa" directory.
 First run init-config.bat
 Next, edit vars.bat to adapt it to your environment, and
 create the directory that will hold your key files.
 To generate TLS keys:
 Create new empty index and serial files (once only)
 1. vars
 2. clean-all
 Build a CA key (once only)
 1. vars
 2. build-ca
 Build a DH file (for server side, once only)
 1. vars
 2. build-dh
 Build a private key/certficate for the openvpn server
 1. vars
 2. build-key-server
 Build key files in PEM format (for each client machine)
 1. vars
 2. build-key
 (use for specific name within script)
 or
 Build key files in PKCS #12 format (for each client machine)
 1. vars
 2. build-key-pkcs12
 (use for specific name within script)
 To revoke a TLS certificate and generate a CRL file:
 1. vars
 2. revoke-full
 3. verify last line of output confirms revokation
 4. copy crl.pem to server directory and ensure config file uses "crl-verify "

Um OpenVPN zusätzlich mit „Perfect Forward Secrecy“ abzusichern, muss noch ein TLS-Auth Key generiert werden.

openvpn --genkey --secret tlsauth.key

Die erstellten OpenVPN Zertifikate sollten an einem sicheren und vertrauenswürdigen Ort verschoben werden. Am besten auf einen verschlüsselten Datenträger/Container. Wie es mit den Zertifikaten weiter geht, kommt in kürze in einem weiteren Beitrag in dem der OpenVPN Server eingerichtet wird.