Smartcard/Crypto-USB-Stick (optional) DEPRECATED!
Einführung:
Auf Smartcards und Crypto-USB-Sticks lassen sich Zertifikate und geheime Schlüssel sicher verwahren.
Es gibt verschiedene Anwendungen für den Einsatz von Smartcards, so können sie auch zur Authentifizierung an einem VPN Gateway dienen. Mit der aktuellen strongSwan Version 4.5.1 werden Smartcards und crypto-sticks auf Basis von PKCS#11 in IKEv2 unterstützt.
Dieses howto beschreibt die Einrichtung des Mobilen Pool VPN Zugang unter Linux. Dabei erfolgt die zertifikatsbasierte Anmeldung mit Hilfe einer Smartcard oder eines Crypto-USB-Stick.
Voraussetzung:
Da in den aktuellen Distributionen die aktuelle strongSwan Version noch nicht zur Verfügung steht, muss die aktuelle strongSwan Version 4.5.1 aus den Quellen kompiliert werden. Die Anleitung hierfür wurde dem strongSwan wiki entnommen und beschreibt die Installation des strongSwan NetworkManager Plugins für Ubuntu 10.10.
Hardware:
Benötigt wird eine Smartcardleser + Smartcard oder ein Crypto-USB-Stick der von OpenSC unterstützt wird.
Jede Smartcard/LeseriKombination bzw USB-Crypto-Token der von OpenSC unterstützt wird, sollte theoretisch funktionieren.
Folgende Hardware haben wir erfolgreich getestet:
CryptoToken:
Feitian ePass PKI Token
Aladdin eToken pro
SmartCard:
Feitian PKI card (FTCOS / PK-01C)
Software:
Getestet und erstellt unter Ubuntu 10.10.
OpenSC Pakete, pcsclite Bibiliotheken, strongSwan 4.5.1, NetworkManager-strongSwan
Vorgehensweise:
1.) Crypto-USB-Stick vorbereiten
2.) strongSwan NetworkManager plugin installieren
3.) VPN-Verbindung konfigurieren
Anleitung:
Diese Anleitung ist teilweise aus folgenden howtos entnommen:
strongSwan smartcard howto
gooze Smartcard howt
1.) SmartCard / Crypto-USB-Stick installieren:
Für den PKCS11 suppport werden folgende Pakete benötigt:
apt-get install pcsc-tools libccid opensc
Karten-Treiber Konfiguration:
/etc/opensc/opensc.conf
...
reader_drivers = pcsc;
...
PCSC Daemon neu starten:
service pcscd restart
Überprüfen ob der Token erkannt wird:
opensc-tool -l
Nr. Driver Features Name
0 pcsc Feitian SCR301 01 00
Der "Feitian SCR301" USB-Token wurde erkannt und kann jetzt verwendet werden..
Folgende Zertifikate/Schlüssel werden auf dem Token gespeichert :
- Mobile Pool User Zertifikat und der zugehörige private Schlüssel
- CA Zertifikat
Dazu wir der Token nach dem PKCS#15 Standard formatiert und zur Speicherung von Zertifikaten und Schlüssel vorbereitet. Der PKCS#15 Standard beschreibt das Format wie Zertifikat und Schlüssel Objekte auf Smartcards gespeichert werden. Dieser Standard wird von den OpenSC Bibliotheks Funktionen vollständig unterstützt.
Zunächst wird auf der "Mobile Pool" Seite im Bereich "Zertifikats-Verwaltung" ein Benutzer Zertifikat erstellt und heruntergeladen. Die Datei ist im PKCS#12 Format, darin enthalten ist das Benutzer Zertifikat, der zugehörige private Schlüssel und das CA Zertifikat. Diese werden aus der .p12 Datei extrahiert:
# the users certificate
openssl pkcs12 -in cert.p12 -clcerts -nokeys -out cert.pem
# the certificate of the certificate authority which issued the certificate
openssl pkcs12 -in cert.p12 -cacerts -nokeys -out root.pem
# the users private key
openssl pkcs12 -in cert.p12 -nocerts -out key.pem
hier wird drei mal nach dem Passwort gefragt:
1.) zum enstchlüsseln des privaten Schlüssels
2.) zum verschlüsseln des privaten Schlüssels der Datei key.pem
3.) zum verifizeren des gerade eingegebenen Passworts
Damit der private Schlüssel dem Zertifikat zugeordnet werden kann, wenn der USB-Crypto Token ausgelesen wird, wird der "subject key identfier" des Benutzerzertifikats ermittellt:
openssl x509 -in cert.pem -text
...
X509v3 Subject Key Identifier:
8F:1F:90:A1:90:E8:9F:EB:7B:14:4C:5A:90:0C:36:33:6B:8F:02:4E
...
Nachdem jetzt die Zertifikate/Schlüssel einzel vorliegen, wird der Crypto-USB-Stick vorbereitet:
Löschen des Crypto-USB-Sticks:
pkcs15-init -E --reader 0
Formatieren, gleichzeitig wird hier auch die PIN und PUK des Tokens und eine Bezeichung vergeben:
pkcs15-init --create-pkcs15 --profile pkcs15\+onepin --use-default-transport-key --pin 0000 --puk 111111 --label "MoPo SC"
Übertragen des privaten Schlüssels, mit Angabe des zuvor ermittelten "Subject Key Identifier":
pkcs15-init --auth-id 1 --id <key-id> --store-private-key key.pem
Übertragen des Benutzerzertifikats:
pkcs15-init --auth-id 1 --store-certificate cert.pem
Übertragen des CA Zertifikats:
pkcs15-init --auth-id 1 --store-certificate root.pem --authority
Mit folgendem Befehl lässt sich der Inhalt des Crypto Token auslesen:
pkcs15-tool --list-pins --list-keys --list-certificates
2.) strongSwan NetworkManager plugin installieren
strongSwan muss aus den aktuellen Quellen kompiliert werden:
Zum Bau von stronSwan werden folgende Pakete benötigt:
aptitude install libpam0q-dev network-manager-dev libnm-util-dev libnm-glib-dev libgnomeui-dev gnome-common
a.) # get the strongSwan tarball
wget download.strongswan.org/strongswan-4.5.1.tar.bz2
tar xjf strongswan-4.5.1.tar.bz2
b.) # build charon with OpenSSL/NM Plugin PKCS11 support
alternativ, findet sich eine Beschreibung zum Bau von debian Paketen >>coming soon<<
./configure --sysconfdir=/etc --prefix=/usr --libexecdir=/usr/lib \
--disable-aes --disable-des --disable-md5 --disable-sha1 --disable-sha2 \
--disable-fips-prf --disable-gmp --disable-stroke --disable-pluto --disable-tools \
--disable-updown --enable-openssl --enable-nm --enable-agent \
--enable-eap-gtc --enable-eap-md5 --enable-eap-mschapv2 --enable-pkcs11
make
make install
# get the NetworkManager strongsSwan plugin as a tarball
wget download.strongswan.org/NetworkManager/NetworkManager-strongswan-1.2.0.tar.bz2
tar xjf NetworkManager-strongswan-1.2.0.tar.bz2
cd NetworkManager-strongswan-1.2.0
# build the NetworkManager strongsSwan plugin
./configure --sysconfdir=/etc --prefix=/usr --libexecdir=/usr/lib/ --with-charon=/usr/lib/ipsec/charon
make
make install
alternativ, finden sich debian Pakete für Ubuntu 10.10 >>coming soon<<
3.) Konfiguration
Angabe des PKCS#11 modules bzw Bibliothek über die der Crypto-USB-Stick zugreifbar ist.
Im Falle des Crypto-USB-Stick wird die "opensc-pkcs11.so" Bibliothek angegeben:
In der Datei /etc/strongswan.conf wir der Abschnitt libstrongswan um folgenden Eintrag erweitert:
/etc/strongswan.conf
...
libstrongswan {
plugins {
pkcs11 {
modules {
openSC {
path = /usr/lib/opensc-pkcs11.so
}
}
}
}
}
...
Zum Schluss wird ein VPN-Verbindungs Beschreibung im NetworkManager erstellt:
siehe "StrongSwan NetworkManager GUI"
Bei der Client Authentisierung kann jetzt Smartcard ausgewählt werden.
Networkmangager plugin: