Application VPN mit Stunnel und XCA
7. Februar 2010 von
andy
Das man mit Stunnel aus unsicheren Diensten sichere Dienste machen kann ist weitläufig bekannt. Prominentestes Beispiele ist aus http –> https zu machen. Also relativ einfach eine SSL-Verschlüsselung vor den eigentlich unsicheren Dienst schalten. Mit Stunnel lassen sich aber auch VPNs bauen. Genauer gesagt, ein VPN passend zu einer Applikation oder einen Dienst. Man sollte allerdings abwägen, ob es für die eigenen Zwecke ausreichend ist. Möchte man auf mehrere Ressourcen, z.B. Mail, Dateidienste, … über ein VPN zugreifen, eignen sich die klassischen Lösung wie IPsec, OpenVPN, etc. oder Lösungen wie Microsofts Direct Access besser.
Stunnel an sich ist in der Handhabung sehr einfach. Aufwändiger ist da schon die Zertifikat-Verwaltung, also der Aufbau und Betrieb einer PKI.
Aber was ist eigentlich der Vorteil eines SSL-basierten VPNs? Oftmals ist es so, das diverse Router keinen IPsec-Verkehr durchlassen oder Provider solche Daten nicht zulassen. Letzteres ist oft in Mobilfunk-Netzen der Fall. Optional lässt sich die Freischaltung dann via Tarif erreichen. Bei VPNs auf Basis von SSL hat man, sofern der Port 443 (Standard für SSL/HTTPS) sehr gute Chancen, das einem ein solches Problem nicht begegnet. Ferner sind SSL-VPNs einfacher im Aufbau und Betrieb als das bei z.B. IPsec der Fall ist. Eine gewisse Einarbeitung ist dennoch notwendig. Bei Stunnel im Speziellen ist keine umfangreiche Installation notwendig. Das bietet dem Administrator die Möglichkeit, den SSL-VPN-Client durch einfaches Kopieren zu verteilen oder sogar auf einen USB-Stick immer dabei zu haben.
Für diesen Beitrag verwende ich XCA für die Zertifikat-Verwaltung. XCA ist wie Stunnel für viele Plattformen (Windows, Linux, Mac) verfügbar. Der Beitrag ist zwar für Windows geschrieben, aber Teilweise ebenso für *nix verwendbar.
Hier dient als Beispiel die Absicherung von RDP. Es kann aber genauso gut VNC oder andere Dienste abgesichert werden.
Vorbereitung
Zu allererst benötigt man die aktuellen Versionen von Stunnel und XCA.
Installation vom Server
Stunnel und XCA installieren oder mit 7-Zip entpacken.
Tipp: Der Einfachheit halber habe ich beide Programme unter C:\SSL-VPN\XCA bzw. C:\SSL-VPN\Stunnel installiert. Dadurch umgeht man zusätzlich Probleme mit der Ordner-Virtualisierung von Windows Vista/7.
Aufbau der Zertifikat-Verwaltung (PKI) mit XCA
Zunächst muss XCA gestartet werden und eine neue Datenbank angelegt werden.

Dazu auf Datei und New DataBase klicken.
Im darauf folgenden Dialog den Namen und Speicherort für die Datenbank angeben.
Anschließend muss ein Passwort für die Datenbank vergeben werden.
Sicherheitshinweis: Der Speicherort der Datenbank sollte sicher sein. D.h. durch Berechtigungen und Verschlüsselung den Zugriff einschränken. Das Passwort sollte stark sein, d.h. mit großen und kleinen Buchstaben, Zahlen und Sonderzeichen.
Zertifikat-Vorlagen erstellen
Auf die Registerkarte Vorlagen wechseln.
Auf Neues Template klicken und CA auswählen. Die Auswahl mit OK bestätigen.
Folgende Felder wie folgt ausfüllen:
Interner Name: SSL-VPN CA Vorlage
Länder code: MEIN LAND
Bundesland, Kreis: MEIN BUNDESLAND
Ort: MEINE STADT
Firma: MEINE FIRMA
Firmenabteilung: MEINE ABTEILUNG
Üblicher Name: leer lassen
E-Mail-Adresse: MEINE EMAIL-ADRESSE
Auf den Reiter Erweiterungen wechseln und im Bereich Zeitspanne einen Haken bei Mitternacht setzen und auf OK klicken.
Anschließend müssen die Zertifikat-Vorlagen für den Server und die Clients erstellt werden. Dazu wieder auf Neues Template klicken und für den Server HTTPS_server bzw. HTTPS_client auswählen.
Als interner Name SSL-VPN Server Vorlage bzw. SSL-VPN Client Vorlage angeben. Ggf. sollte man die Laufzeit auf dem Reiter Erweiterungen anpassen. Standardmäßig gilt ein Zertifikat ein Jahr lang.
Zum Schluss sollte man insgesamt drei Vorlagen haben. Damit sind die Vorbereitungen abgeschlossen.
CA-Zertifikat Erstellen
Nun wird zuerst das CA-Zertifikat erstellt. Dieses ist notwendig um die Zertifikate für den Stunnel-Server und die Stunnel-Clients Unterschreiben zu können. Auf die Registerkarte Zertifikate wechseln und Neues Zertifikat anklicken.
Im Bereich Vorlage die SSL-VPN CA Vorlage auswählen und auf Übernehmen klicken. Auf die Registerkarte Besitzer wechseln und bei Interner Name und Üblicher Name einen Namen, z.B. SSL-VPN CA, eingeben. Im Abschnitt Privater Schlüssel auf Erstelle einen neuen Schlüssel klicken.
Den darauf folgenden Dialog mit Erstellen bestätigen. Nachdem der Schlüssel erstellt wurde, den Dialog mit OK verlassen.
Server-Zertifikat erstellen
Auf der Registerkarte Zertifikate auf Neues Zertifikat klicken. Im Bereich Unterschreiben Verwende dieses Zertifikat zum Unterschreiben SSL-VPN CA auswählen. Im Bereich Signatur-algorithmus MD 5 auswählen. Im Bereich Vorlage SSL-VPN Server Vorlage auswählen und auf Übernehmen klicken.
Auf der Registerkarte Besitzer bei Interner Name und Üblicher Name den Namen SSL-VPN Server angeben und im Abschnitt Privater Schlüssel auf Erstelle einen neuen Schlüssel klicken. Nachdem der Schlüssel erstellt wurde, den Dialog mit OK verlassen.
Client-Zertifikat erstellen
Auf der Registerkarte Zertifikate wieder auf Neues Zertifikat klicken. Diesmal die Vorlage SSL-VPN Client Vorlage auswählen und auf Übernehmen klicken. Auf der Registerkarte Besitzer bei Interner Name und Üblicher Name den Namen SSL-VPN Client bzw. den Namen des jeweiligen Benutzers eingeben und im Abschnitt Privater Schlüssel auf Erstelle einen neuen Schlüssel klicken. Nachdem der Schlüssel erstellt wurde, den Dialog mit OK verlassen.
Diesen Abschnitt für alle Clients wiederholen.
Bis zu diesem Zeitpunkt sollte man mindestens drei Zertifikate haben:
Zertifikate exportieren
Damit die Zertifikate für Stunnel nutzbar sind, müssen Diese exportiert werden.
Zuerst wird das CA-Zertifikat exportiert. Dieses Zertifikat benötigt sowohl der SSL-VPN Server als auch die jeweiligen SSL-VPN Clients.
Auf dem Reiter Zertifikate das SSL-VPN CA Zertifikat auswählen und auf Export klicken.
Zuerst den Speicherort und den Namen angeben. Achtung: XCA hängt gerne ein *.crt an!
Als Exportformat PEM auswählen und auf OK klicken.
Am einfachsten ist es, das exportierte CA-Zertifikat zu kopieren und in den Ordner des SSL-VPN Servers und der SSL-VPN Clients einzufügen.
Den Vorgang für das Zertifikat des SSL-VPN Servers und für alle SSL-VPN Clients wiederholen. Den jeweiligen Speicherort und Namen entsprechend anpassen. Als Exportformat PEM Cert + key auswählen.
Im Ordner des SSL-VPN Servers sieht es dann z.B. wie hier aus.
CRL erstellen
Eine CRL, Certificate Revocation List, ist eine Liste von Zertifikaten, die zurückgezogen wurden. Eine CRL ist zu empfehlen, wenn es um mehr als einen SSL-VPN Client geht. Dadurch umgeht man das vollständige neu ausstellen aller Zertifikate, falls ein Client-Zertifikat kompromittiert wird oder ein Benutzer kein SSL-VPN mehr benötigt.
Zunächst aber erst mal die Frage, wie man ein Zertifikat zurück nimmt.
Dazu auf den Reiter Zertifikate das entsprechende Zertifikat auswählen und mit der rechten Maustaste darauf klicken. Im Kontextmenü auf Rücknahme klicken.
Sobald das Zertifikat ungültig ist, wird es mit einem entsprechenden Symbol gekennzeichnet.
Mit einem Rechtsklick auf SSL-VPN CA, CA – CRL erstellen wird die CRL erzeugt.
Die Gültigkeitsdauer der CRL kann sowohl im Dialog beim erstellen der CRL als auch in den Eigenschaften der CA eingestellt werden:
Nun muss die CRL exportiert werden. Dazu auf den Reiter Rücknahmelisten wechseln. Die aktuelle CRL auswählen und auf Export klicken. Anschließend den Speicherort und Namen angeben. Als Exportformat PEM auswählen.
CRL verwalten
Zurückgenommene Zertifikate kann man jederzeit wieder aktivieren. Dazu das zurückgenommene Zertifikat mit der rechten Maustaste anklicken und auf Rücknahme aufheben klicken.
Anschließend erneut das Zertifikat mit der rechten Maustaste anklicken und auf Vertrauen klicken.
Wichtig ist, das man Nur dann vertrauen, wenn wir dem Aussteller vertrauen auswählt.
Sobald die Rücknahme abgeschlossen ist, muss eine neue CRL erzeugt und exportiert werden.
Konfiguration des Stunnel-Server
Zunächst wird der Stunnel-Server vorbereitet.
Eine Datei stunnel.conf im Ordner des Stunnel-Servers mit einem Text-Editor anlegen und folgenden Inhalt einfügen:
; Certificate + key
cert = SSL-VPN_Server.pem
; Some performance tunings
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
; Authentication stuff
verify = 2
; CAfile
CAfile = SSL-VPN_CA_Cert.pem
; CRLfile
;CRLfile = SSL-VPN_CA_CRL.pem <- wird benötigt wenn eine CRL verwendet wird
; Some debugging stuff useful for troubleshooting
;debug = 7
output = stunnel.log
; Service-level configuration
[SERVICENAME]
accept = IP:PORT
connect = IP:PORT
TIMEOUTclose = 0
Den Bereich [SERVICENAME] auf die entsprechenden Bedürfnisse anpassen. Wenn auf allen IP-Adressen des Servers Verbindungen angenommen werden sollen, reicht es aus, nur den Port bei accept anzugeben. Falls das Ziel ebenfalls der Server ist, gilt das Gleiche wie beim Akzeptieren von Verbindungen, nur unter connect. Benötigt man mehr als einen Port, so kann man mehrere Serviceabschnitte definieren.
Um Stunnel unter Windows als Dienst zu installieren folgenden Befehl ausführen:
stunnel.exe -install
![]()
Um Stunnel zu starten entweder den Befehl stunnel.exe –start ausführen oder in der Dienste-Verwaltung stunnel starten.
Konfiguration des Stunnel-Clients
Eine Datei stunnel.conf im Ordner des Stunnel-Clients mit einem Text-Editor anlegen und folgenden Inhalt einfügen:
; Certificate + key
cert = SSL-VPN_Client.pem
; Some performance tunings
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
; Authentication stuff
verify = 2
; CAfile
CAfile = SSL-VPN_CA_Cert.pem
; Some debugging stuff useful for troubleshooting
;debug = 7
output = stunnel.log
; Use it for client mode
client = yes
; Service-level configuration
[SERVICENAME]
accept =PORT
connect = IP:PORT
TIMEOUTclose = 0
Im Bereich [SERVICENAME] – accept den lokalen Port angeben, auf den Verbindungen angenommen werden sollen. Bei connect die IP-Adresse oder den Computernamen und den Port des Stunnel-Servers angeben.
Den Stunnel-Client kann man genauso wie den Stunnel-Server als Dienst laufen lassen. Das bietet den Vorteil, dass das Programm transparent im Hintergrund läuft und vom Benutzer keinen Eingriff verlangt. Alternativ lässt sich der Stunnel-Client wie eine Anwendung ausführen.
Sobald der Stunnel-Client ausgeführt wird, kann z.B. über den Remote Desktop Client unter Angabe der localhost-Adresse und des Ports eine mit SSL-verschlüsselte Verbindung hergestellt werden.
Hier ein kleines Beispiel-Skript für den Start von Stunnel, dem Aufruf des Remote Desktop Clients und dem anschließenden beenden von Stunnel:
@echo off
title ssl-vpn client
rem start stunnel
start stunnel.exe
rem start rdp
mstsc /v:localhost:9000
rem kill stunnel
taskkill /im stunnel.exe /f /t
Tipp: Falls man kein Tray Icon haben möchte, dann in der stunnel.conf folgende Zeile einfügen:
; Taskbar icon
taskbar = no
Ein paar abschließende Worte
Für ein automatisches Verteilen bietet sich zudem die Option -quiet an. Dadurch wird der Stunnel-Dienst ohne Meldung installiert.
Nicht vergessen darf man die Konfiguration der Firewall für alle verwendeten Ports.
Unter Umständen macht es bei schmalbandigen Verbindungen Sinn,
die Option compression = zlib | rle in der stunnel.conf zu setzen. Dadurch wird eine Kompression aktiviert. In manchen Szenarien kann dies aber auch negative Auswirkungen haben, so z..B. bei Fernzugriffen wie RDP, da hier unter Umständen eine spürbare Latenz verursacht wird
Links
OpenVPN.eu Wiki – Schlüsselverwaltung mit XCA
Optik Berndt – Erstellen von Zertifikaten mit xca speziell zur Nutzung mit OpenVPN
Geschrieben in Software |
Keine Kommentare »
Privatecast Webradio
WANSYS