Ein VPN-Client benötigt zunächst sein Zertifikat, den dazu passenden Schlüssel und eine Kopie des CA-Zertifikats. Linux-Clients verwalten die VPN-Konfiguration ganz simpel über das GUI-Tool NetworkManager. Hier muss der Anwender lediglich den Servernamen beziehungsweise die IP-Adresse, den Port und das Protokoll angeben und dem Tool mitteilen, wo die Zertifikate und Schlüssel zu finden sind.
Manche OpenVPN-Clients, wie der auf Windows oder Android, bringen aber keine hübsche GUI für die Client-Konfiguration mit. Hier bereiten Sie eine fertige "ovpn"-Konfigurationsdatei mit allen Parametern vor, übertragen sie auf das jeweilige Zielsystem und starten den OpenVPN-Client.
Das verwendete ovpn-Dateiformat stimmt dabei weitgehend mit dem conf-Format des Servers überein. Um die Zertifikate und Schlüssel nicht als separate Dateien einspielen zu müssen, erlaubt das ovpn-Dateiformat, diese Informationen inline einzubinden.
Dazu müssen Sie aus den drei Dateien "ca.crt", "client01.crt" und "client01.key" sämtliche Informationen in den Abschnitten "-----BEGIN CERTIFICATE-----" und "-----END CERTIFICATE-----" beziehungsweise "-----BEGIN PRIVATE KEY-----" und "-----END PRIVATE KEY-----" mit einem Texteditor kopieren und dann zusammen mit den Konfigurationsoptionen in eine ovpn-Datei sichern.
Das sieht dann in etwa so aus:
client
remote (<IP oder FQDN Ihres VPN-Servers>)
port 443
proto tcp
nobind
dev tun
persist-tun
persist-key
<ca>
-----BEGIN CERTIFICATE-----
Inhalt des ca.crt hier
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
Inhalt des client01.crt hier
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
Inhalt des client01.key hier
-----END PRIVATE KEY-----
</key>
Nun genügt es, den freien OpenVPN-Client auf Windows, Mac, Android oder anderen unterstützten Systemen zu installieren und diesem die ovpn-Datei mitzugeben.
Link-Codes
[1] OpenVPN: https://openvpn.net/
Die hier gezeigte Konfiguration genügt bereits für ein sicheres VPN, aber natürlich lässt sich das Setup verbessern. Dazu zählt vor allem die TLS-Autorisierung, die zwar den Tunnel selbst nicht sicherer macht, aber den VPN-Server besser vor Unbefugten schützt. Sie erstellen dazu einen symmetrischen Schlüssel, den "ta.key", der auf dem Server und allen VPN-Clients vorhanden sein muss.
Bei aktivierter "TLS-Auth" signiert der OpenVPN-Client alle IP-Pakete an den VPN-Server mit dem TA-Schlüssel. Der Server reagiert dann nur noch auf signierte Pakete. Das schützt den VPN-Server beispielsweise vor DDoS-Attacken oder Portscans. Das Kommando
openvpn --genkey --secret ta.key
erstellt einen solchen Key. Der Server bindet ihn dann via
tls-auth ta.key 0
in die Konfiguration ein. Die "0" steht dabei für "incoming", der Server hört nur noch auf signierte Pakete, signiert selber aber nicht. In der Clientkonfiguration steht dann entsprechend:
tls-auth ta.key 1
wobei die "1" den Client anweist, ausgehende Pakete zu signieren. Wie zuvor bei den Zertifikaten integrieren Sie den TA-Key ebenfalls direkt in das ovpn-File mit "BEGIN/END OpenVPN Static key V1".
Um derweil einen Webserver zusammen mit dem OpenVPN-Server auf Port 443 laufen zu lassen, genügt eine Server-Anweisung in der "/etc/openvpn/server/server.conf":
port-share 127.0.01 4343
OpenVPN leitet dann allen eingehenden Nicht-VPN-Traffic auf Port 4343 um. Dementsprechend müssen Sie dann den Webserver konfigurieren, sodass dieser auf Port 4343 auf eingehenden HTTPS-Verkehr lauscht.