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.