Ist man viel unterwegs, kommt man oft in die Verlegenheit, aus der Ferne auf das private oder Firmennetzwerk zugreifen zu wollen. Der Abgleich der Daten muss jedoch sicher sein – dafür empfiehlt sich eine VPN-Verbindung. So werden die Daten verschlüsselt übertragen, und die Kommunikationspartner müssen sich authentifizieren.
Die klassische VPN-Lösung im Open-Source-Bereich heißt OpenVPN [1]. Sie überträgt die Daten verschlüsselt über eine TLS-Verbindung. Als Transportprotokoll stehen wahlweise TCP und UDP zur Verfügung. Die Authentifizierung von Client und Server erfolgt über Benutzername und Passwort, einen gemeinsamen Schlüssel (Pre-shared Key) oder mit Zertifikaten. Das letztgenannte Verfahren gilt im Allgemeinen als das sicherste und wird deshalb hier vorgestellt.
Der OpenVPN-Server findet sich in der Paketverwaltung der meisten Linux-Distributionen und der BSD-Betriebssysteme und steht auch für Mac OS X und Windows bereit. Sind die dort angebotenen Pakete zu alt, lädt man aktuellere von der Projektseite entpackt und istalliert sie mit
# ./configure && make && make install
Der Server und alle Anwender, die auf ihn zugreifen wollen, benötigen jeweils einen privaten Schlüssel (*.key) sowie ein Zertifikat (*.crt). Diese Zertifikate müssen von einer dem Server bekannten Zertifizierungsstelle (CA) signiert sein. Für den Verbindungsaufbau werden serverseitig noch Diffie-Hellman-Parameter (dh1024.pem) benötigt.
Die für die Verbindung zwischen Client und Server nötigten Zertifikate kann man sich selbst mit den Bibliotheken von OpenSSL herstellen. OpenVPN bietet im Unterverzeichnis »easy-rsa
«
verschiedene Skripte, mit denen Zertifikate auch ohne weitere Vorkenntnisse erzeugt werden können, dabei ist zunächst das Verzeichnis »easy-rsa
«
samt seinem kompletten Inhalt nach »/etc/openvpn
«
zu kopieren. Dann wechselt man in dieses Verzeichnis.
Im ersten Schritt werden dort einige Parameter der Datei »vars
«
den eigenen Gegebenheiten angepasst:
export KEY_PROVINCE="NRW" export KEY_CITY="Bonn" export KEY_ORG="MyOffice" export KEY_EMAIL="admin@noatun.net"
Zusätzlich zu diesen Angaben werden bei Bedarf noch die Schlüssellänge (»KEY_SIZE
«
), die Gültigkeitsdauer der Zertifikate der CA (»CA_EXPIRE
«
) und der Client- beziehungsweise die Server-Zertifikate (»KEY_EXPIRE
«
) eingestellt.
Durch die Aufrufe
# source ./vars # ./clean-all # ./build-ca # ./build-key-server server # ./build-key client1 # ./build-dh
werden nacheinander die gesetzten Parameter geladen, das Verzeichnis »keys
«
(sofern bereits vorhanden) aufgeräumt und der öffentliche und private Schlüssel der CA (»build-ca
«
), des Servers (»build-key-server server
«
) und des Clients (»build-key client1
«
) sowie die Diffie-Hellman Parameter (»build-dh
«
) generiert.
Beim Schreiben der Zertifikate sind verschiedene Angaben zu machen, einen möglichen Ablauf für ein Client-Zertifikat zeigt Listing 1, bei den anderen Zertifikaten läuft es sehr ähnlich ab.
Listing 1
Definieren eines Client-Zertifikats
Die Auskünfte zu Land, Stadt und so weiter wurden in »vars
«
gesetzt und können so auch für andere Zertifikate übernommen werden, eine Ausnahme bildet der »Common Name
«
, der immer eindeutig sein muss.
Die mit diesen Aufrufen generierten Dateien landen im Unterverzeichnis »keys
«
. Von hier aus müssen abschließend noch die Dateien »ca.crt
«
, »server.crt
«
, »server.key
«
und »dh1024.pem
«
nach »/etc/openvpn
«
kopiert werden. Es kann auch ein anderes Zielverzeichnis angegeben werden, dann ist die nachfolgende Serverkonfiguration anzupassen.