Stunnel
ist ein SSL-Wrapper, der beliebige
TCP-Netzwerkkommuikation per SSL verschlüsseln kann. Stunnel übernimmt
die Verschlüsselung und übergibt dem Programm die Klartext-Daten.
Im Server-Mode wird stunnel mit dem Schalter -l
der Name des
Programms übergeben, welches gestartet werden soll. Stunnel verbindet
STDIN und STDOUT des Programm mit dem hiesigen Endpunkt der
Verbindung. Dieses ist das gleiche Verfahren, wie es auch z.B beim
Starten von Programmen über inetd
angewandt wird.
Stunnel benötigt ein Zertifikats-/Schlüsselpaar in einem genau festgelegtem Format.
Zuerst wird der CSR mit Hilfe von openssl req
erzeugt. Hierbei ist darauf zu achten, daß der Private-Key nicht
verschlüsselt wird, da stunnel
keine Möglichkeit bietet,
das Passwort für den Key vom User abzufragen.
openssl req -new -keyout st-key.pem -out st-csr.pem -days 365 -nodes
Dann wird der CSR von der CA signiert. Hier ist der -notext Schalter zu beachten, der die Ausgabe der Textinformationen des Zertifikats unterdrückt.
openssl ca -notext -policy policy_anything -config ../ca/openssl.conf \ -out st-cert.pem -infiles st-csr.pem
Jetzt werden Key und Zertifikat in ein File geschrieben: Hier ist die Reihenfolge von Zertifikat und Key in der .pem Datei wichtig. Hier muß der unverschlüsselte Key an erster Stelle gefolgt vom signiertem Zertifikat (nicht dem CSR!). Zwischen Key und Zertifikat sowie Zertifikat und Dateiende wird eine Leerzeile eingefügt.
(cat st-key.pem ; echo ""; cat st-cert.pem; echo "") > stunnel.pem
Dieses Zertifikat sollte die Berechtigungen von 0400 besitzen. Auf
jeden Fall sollte es nur für den Eigentümer lesbar sein. Jetzt wird
das Zertifikat/Keyfile nach /etc/ssl/certs/stunnel.pem
kopiert,
bzw. auf den in stunnel eincompilierten Pfad (stunnel -V). Alternativ
kann der komplette Pfad zum File mit der Option -p beim Starten
angegeben werden.
inetd
Für den Aufruf eines Programms an Port 2000 über inetd wird die
folgende Zeile in die Datei /etc/inetd.conf
geschrieben:
2000 stream tcp nowait root /usr/sbin/stunnel -f \ -p /etc/ssl/stunnel.pem -l /usr/local/sbin/daemon -- daemon arg1
Sollen dem Dienst Argumente übergeben werden, wird wie im Beispiel
--
gefolgt vom Programmnamen und den Argumenten eingegeben.
Stunnel kann auch auf Client-Seite genutzt werden, um eine verschlüsselte Kommunikation mit einem Client zu ermöglichen, der SSL nicht unterstützt. Der Aufruf von SSL ist dann folgendermaßen:
stunnel -c -r <remotehost>:<port>
Auch hier erfolgt die Klartext-Kommunikation über STDIN und
STDOUT. Falls eine Authentifizierung des Servers erwünscht ist, kann
der Schalter -A PATH -v n
mit PATH als Pfad zum
CA-Zertifikat und n als Verifizierungslevel erfolgen. Die
möglichen Werte für n werden in der manpage angegeben oder
bei Aufruf von stunnel -h
angegeben.