Verwenden eines Aladdin-eToken unter Linux

Stand: 02.11.2011

Mit folgenden Schritten haben wir erfolgreich ein eToken PRO 64k (4.2) der Firma Aladdin (jetzt SafeNet) unter Linux verwendet, und zwar sowohl mit Mozilla Firefox und Thunderbird und mit rdesktop als auch mit OpenSSH.

Dabei hat sich gezeigt, dass die üblicherweise verwendeten PKCS#11-Datenstrukturen und die von OpenSSH bis Version 5.3 verwendeten PKCS#15-Datenstrukten parallel auf dem eToken abgelegt und bearbeitet werden können, ohne sich gegenseitig zu stören. (OpenSSH ab Version 5.4 verwendet ebenfalls PKCS#11.) Diese Datenstrukturen können problemlos sowohl unter Windows als auch unter Linux verwendet werden.

Unsere Experimente haben wir unter Xubuntu 10.04 (mit OpenSSH 5.3) und unter Xubuntu 10.10 (mit OpenSSH 5.5) jeweils mit der 32-Bit- und mit der 64-Bit-Version vorgenommen, außerdem unter Xubuntu 11.04 mit der 32-Bit-Version.

Anders als bei den meisten anderen Linux-Distributionen sind unter Xubuntu leider einige Programme ohne Smartcard-Unterstützung kompiliert; diese haben wir wie in diesen Hinweisen beschrieben nachgerüstet.

Software-Installation, Einbindung in Firefox, Schlüsselgenerierung

  • Von Aladdin haben wir uns den SafeNet Authentication Client 8.0 lizensiert, heruntergeladen und ausgepackt. (Nur für berechtigte ZIV- und IVV-Mitarbeiter: Hier liegt eine Kopie.) Unter einem frisch installierten Xubuntu 10.10 mussten wir vorher nur zwei Pakete nachinstallieren:

    sudo apt-get install pcscd libccid
    

    Unter einem frisch installierten Xubuntu 11.04 (32 Bit) waren es drei Pakete:

    sudo apt-get install pcscd libccid libhal1
    
  • Falls keine Integration in das Betriebssystem, sondern nur in Firefox oder Thunderbird gewünscht wird, wird nicht das gesamte Paket benötigt, sondern nur die Datei libeToken.so.8, von der man die richtige Version (32 Bit oder 64 Bit) aus dem Paket extrahieren und in ein beliebiges Verzeichnis legen kann. Auf der Einstellungen-Seite von Firefox oder Thunderbird unter Erweitert | Verschlüsselung | Kryptographie-Module kann man dann auf Laden klicken und diese Datei als Kryptographie-Modul hinzufügen.

  • Für eine vollständige Installation extrahiert man aus obigem ZIP-Archiv, welches verschiedene ZIP-Archive für Debian- und RPM-basierende 32- und 64-Bit-Systeme enthält, das richtige ZIP-Archiv und packt die darin enthaltenen Dateien aus. Dann schließt man alle laufenden Firefox- und Thunderbird-Fenster, ruft danach die Installationsroutine auf und startet danach den Rechner neu. Danach sind entsprechende Dämonen gestartet und neue Kryptographie-Module in Firefox und Thunderbird eingetragen. (Falls das Eintragen nicht geklappt hat, weil das Programm noch lief, kann man wie oben beschrieben die Datei /lib/libeToken.so.8 bzw. /lib64/libeToken.so.8 als Kryptographie-Modul hinzufügen.)

  • Beide Methoden haben wir unter Xubuntu 10.04 (32 bit und 64 bit) und unter Xubuntu 10.10 (32 bit) erfolgreich ausprobiert, auch von anderen Systemen haben wir gehört, dass nur pcscd und libccid als zusätzliche Software benötigt wurden.

    (Bei der Einbindung in Firefox haben wir vereinzelt Instabilitäten nach Abziehen und Wiedereinstecken des eToken erlebt, die wir mit der von uns nur auf 32-Bit-Systemen ausprobierten Vorgängerversion eToken PKI Client 5.0 SP1 nicht erlebt hatten. Nur für berechtigte ZIV- und IVV-Mitarbeiter: Hier liegt eine Kopie.)

Die WWUCA zertifiziert nur Schlüssel, die mindestens 2048 Bit lang sind. Bei manchen eTokens muss man allerdings die 2048-Bit-Unterstützung erst aktivieren. Dazu kann man das Programm etProps starten, auf Erweiterte Ansicht (Zahnradsymbol) klicken, unter Tokens das zu verwendende eToken anklicken, auf Initialize Token (erster Button) klicken, das Formular ausfüllen, auf Erweitert klicken, die Unterstützung für 2048-Bit-RSA-Schlüssel ankreuzen und dann auf OK und auf Starten klicken, um das Token mit der 2048-Bit-Unterstützung neu zu initialisieren.

Nach Neustart des Firefox konnten wir beim Beantragen eines X.509-Zertifikats ein eingestecktes eToken als Aufbewahrungsort für das erzeugte Schlüsselpaar auswählen. Nach Empfang der Zertifikats brauchten wir nur bei eingestecktem eToken auf den Link in der E-Mail zu klicken. Danach konnten wir das eToken sowohl im Mozilla Firefox zur Client-Authentifizierung gegenüber Webservern als auch im Mozilla Thunderbird für S/MIME-geschützte E-Mails verwenden, unabhängig vom Betriebssystem (Linux oder Windows).

Der in obiger ZIP-Datei ebenfalls enthaltene Dokumentation enthält ausführliche Informationen.

OpenSSH ab Version 5.4

Auch SSH-Verbindungen konnten mit dem eToken leicht aufgebaut werden.

  • Der SSH-Agent wird normalerweise unter Linux bereits bei Sitzungsbeginn gestartet. Der (evtl. oben nachinstallierte) pcscd sollte ebenfalls laufen.

  • Das eingestecktem eToken kann dem SSH-Agent mit einem der folgenden beiden Befehle bekannt gemacht werden (je nach Betriebssystemversion):

    ssh-add -s /lib/libeToken.so.8   # auf 32-Bit-Systemen
    ssh-add -s /lib64/libeToken.so.8 # auf 64-Bit-Systemen
    

    Sie werden nach dem eToken-Passwort gefragt. (Falls Sie wie unten beschrieben auch PKCS#15-Datenstrukturen angelegt haben: Hier wird das Passwort für die auch von Firefox/Thunderbird verwendeten PKCS#11-Datenstrukturen verlangt.)

  • Den auf den SSH-Servern in die Datei .ssh/authorized_keys einzutragenden öffentlichen Schlüssel kann mit folgendem Befehl abrufen:

    ssh-add -L
    
  • Danach können SSH-Verbindungen bei gestecktem eToken ohne erneute Passwortabfrage aufgebaut werden:

    ssh username@rechnername
    

OpenSSH bis Version 5.3

Diese Versionen verwenden nicht die PKCS#11-Datenstrukturen, sondern parallel dazu angelegte PKCS#15-Datenstrukturen mit eigenen Schlüsselpaaren.

Initialisierung der PKCS#15-Datenstrukturen auf dem eToken

Ein eToken mit PKCS#15-Datenstrukturen hat eine Security-Officer-PIN (für Datenänderungen) und einen Security-Officer-PUK (PIN update key, zum SO-PIN-Neusetzen). Jedes Schlüsselpaar hat eine User-PIN und eine User-PUK. Die folgende Befehlsfolge löscht vorhandene PKCS#15-Datenstrukturen und erfragt bzw. generiert die PINs und PUKs und ein erstes Schlüsselpaar.

pkcs15-init -E
pkcs15-init -C
pkcs15-init -P -a 01
pkcs15-init -G rsa/2048 --split-key -a 01
pkcs15-tool -k -c

(Der neue Schlüssel sollte die ID 45 erhalten haben, sonst sind die Befehle weiter unten entsprechend abzuändern.)

Zertifizieren des Schlüssels

Variante 1: Normalerweise benötigen Sie kein offizielles Zertifikat für Ihren SSH-Schlüssel. Dann können Sie mit den folgenden Eingaben direkt ein Selbstzertifikat erzeugen und in die Datei my.cert schreiben:

openssl
engine -c -t dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib/opensc-pkcs11.so
req -engine pkcs11 -new -key id_45 -keyform engine -x509 -out my.cert
quit

Variante 2: Einige kommerzielle SSH-Produkte arbeiten mit offiziellen Zertifikaten, um die Echtheit des Kommunikationspartners zu überprüfen. Dann sollten Sie die folgende Eingabe verwenden, um einen Zertifizierungsantrag in die Datei my.req zu schreiben:

openssl
engine -c -t dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib/opensc-pkcs11.so
req -engine pkcs11 -new -key id_45 -keyform engine -out my.req
quit

Bei den Rückfragen sollten Sie anzugeben:

Country Name: DE
State or Province Name: . (ein nackter Punkt)
Locality Name: . (ein nackter Punkt)
Organization Name: Universitaet Muenster oder Universitaetsklinikum Muenster oder Kunstakademie Muenster
Organizational Unit Name: Entweder . (ein nackter Punkt) oder eine ausgeschriebene Bezeichnung der Organisationseinheit ohne Umlaute, z. B. Zentrum fuer Informationsverarbeitung; aber keine für Außenstehende unverständliche Abkürzung wie ZIV
Common Name: Der ausgeschriebene Vor- und Nachname; ein »Dr.« oder anderer Titel darf nur angegeben werden, falls er auch im Personalausweis steht.
Email Address: Eine E-Mail-Adresse aus den Domainbäumen uni-muenster.de, ukmuenster.de, wwu.de, kunstakademie-muenster.de

Die bei Variante 2 erhaltene Datei my.req sollten Sie wie hier beschrieben wie einen Antrag für ein Server-Zertifikat hochladen, dabei das Zertifikatprofil User auswählen, und durch die WWUCA zertifizieren lassen. Das später von der WWUCA per E-Mail erhaltene Zertifikat sollten Sie in der Datei my.cert ablegen.

Übertragen des Zertifikats auf das eToken

Die Zertifikatdatei my.cert muss dann wieder auf dem eToken abgelegt werden:

pkcs15-init -X my.cert -i 45
pkcs15-tool -k -c

Auslesen des öffentlichen Schlüssel

Zwecks Upload auf die SSH-Server, gegenüber denen man sich mit dem eToken ausweisen möchte, kann man dann den Public Key auslesen und in den drei möglichen Formaten abspeichern:

ssh-keygen -D 0 >my.pubkeys
grep ^ssh <my.pubkeys >my.ssh2key
grep -v ^ssh <my.pubkeys >my.ssh1key
ssh-keygen -e -f my.ssh2key >my.sshXkey

Welches Zielsystem den Inhalt welcher der Dateien my.ssh?key verlangt, hängt von der dortigen SSH-Version ab.

Jetzt sollte der Nutzer in der Lage sein, in einem Terminalfenster bei eingestecktem eToken den folgenden Befehl abzusetzen und bei richtiger Eingabe der PIN anschließend ohne weitere Passworteingabe SSH- und SCP-Verbindungen zu den vorbereiteten Zielsystemen aufbauen können.

ssh-add -s 0

(Eine falsch eingegebene PIN führt erst später bei SSH-Verbindungsversuchen zu Fehlern. Dann sollte man den Schlüssel entfernen und neu einbinden:)

ssh-add -e 0
ssh-add -s 0

(Bei späteren SSH-Verbindungsversuchen kann es auch dadurch zu Fehlern kommen, dass das eToken gerade anderweitig benutzt wird; der SSH-Agent ist dann nicht besonders geduldig. Dann hilft es einfach, den SSH-Verbindungsversuch zu wiederholen.)

(Falls andere Smartcard-Leser am PC angeschlossen sind, ist eventuelle eine andere Reader-Nummer anzugeben, diese kann man mit opensc-tool -l herausfinden.)

Mehrere gleichzeitig laufende Anwendungen

Es kann nur ein Zugriff zu einer Zeit auf ein eToken stattfinden. Leider sind jedoch weder die Mozilla-Produkte (bei X.509-Client-Zertifikaten auf dem eToken) noch der OpenSSH-Agent (bei SSH-Keys auf dem eToken) so programmiert, dass sie warten, wenn sie nicht sofort auf das eToken zugreifen können, sondern brechen mit einer Fehlermeldung ab. Sie müssen also damit rechnen, mehrere Anmeldeversuche zu benötigen, wenn mehrere Programme (SSH-Agents, Firefox, Thunderbird usw.) gleichzeitig das eToken verwenden möchten.

Leider scheint der OpenCT-Reader-Driver der OpenSC-Software, die von OpenSSH 5.3 und älter verwendet wird, das eToken unnötig lange zu reservieren und so die parallele Verwendung zu behindern. Es hat bei uns geholfen, in der Datei /etc/opensc/opensc.conf die Zeile reader_drivers = pcsc, ctapi; (ohne die Angabe openct) zu aktivieren und den Rechner neu zu starten. Falls die Reservierungen weiterhin stören oder durch den fehlenden OpenCT-Driver andere Probleme auftreten, kann man auf sorgfältig gepflegten Rechnern statt dessen die unter Sicherheitsgesichtspunkten nicht völlig unbedenkliche Zeile lock_login = false; aktivieren. (Mit OpenSSH 5.4 brauchten wir OpenSC und OpenCT überhaupt nicht mehr zu installieren, so dass sich dieses Problem uns nicht mehr stellte.)

rdesktop

Leider haben wir es nicht geschafft, rdesktop unter 64-Bit-Xubuntu 10.04 dazu zu bringen, eine Smartcard tatsächlich anzusprechen. Unter 32-Bit-Xubuntu 10.04 hatten wir keine Probleme, unter 64-Bit-Xubuntu 10.04 beschwert sich der mit rdesktop angesprochene Windows-Server nach der PIN-Eingabe, dass die Smartcard abgezogen worden sei. Hinweise sind willkommen. (Unter 10.10 haben wir es noch nicht ausprobiert.) Siehe auch hier.


Impressum | © 2011 Universität Münster
Zentrum für Informationsverarbeitung (ZIV)
Zertifizierungsstelle der Universität Münster (WWUCA) · 48149 Münster
Tel.: +49 251 83-31600 · Fax: +49 251 83-31555
E-Mail: