In diesem Post zeige ich Euch, wie Ihr SoftHSM installiert und einrichtet um es als PKCS#11 Token zu verwenden.
Habt Ihr auch schon einmal mit PKCS#11 herum experimentieren wollen? Das Problem dabei ist, dass man normalerweise ein Stück Hardware benötigt, welches mit PKCS#11 angesprochen werden kann. Zum Hintergrund: bei PKCS#11 (aktuelle Spezifikation) handelt es sich um einen Standard für die asymmetrische Kryptographie und definiert eine Schnittstelle zur Verwendung kryptographischer Token. Damit lassen sich beispielsweise Smartcards oder auch USB-Token ansprechen. Im Unternehmensumfeld werden auch interne PCI Crypto-Beschleuniger-Karten mit PKCS#11 angebunden.
Ich selbst habe einen FEITIAN R301 Smartcard Reader und eine FEITIAN ePass PKI Card. Aber zum Experimentieren möchte man nicht immer den Reader anschließen. Und hier kommt SoftHSM ins Spiel. Es implementiert PKCS#11 innerhalb von Software und ersetzt somit das Hardware Token während der Entwicklung.
##Installation Ladet euch die aktuelle Version 2.0.0 von SoftHSM von https://www.opendnssec.org/2015/07/softhsm-2-0-0/ herunter. (Vergesst nicht die Signatur bzw. die Checksummen zu prüfen). Anschließend muss das Archiv entpackt und das ganze kompiliert werden.
$ tar xzf softhsm-2.0.0.tgz
$ cd softhsm-2.0.0/
$ ./configure
$ make
$ sudo make install
Beim ./configure
kann man noch einige Einstellungen treffen, die für mich jedoch in der Standardkonfiguration vollkommen in Ordnung sind. So wird OpenSSL eingesetzt und die Speicherung der Schlüssel findet in Dateiform statt. Um den Build durchführen zu können benötigt ihr noch einige Pakete:
$ sudo apt-get install build-essential openssl libssl-dev
Nach der Installation solltet ihr softhsm2-util
testweise aufrufen können:
$ softhsm2-util -v
2.0.0
##Konfiguration
Direkt nach der Installation kann die Initialisierung ohne root noch nicht durchgeführt werden, da der Standardpfad zur Speicherung der Token nicht zugegriffen werden kann. Deshalb muss man die die config mit gksudo gedit /etc/softhsm2.conf
auf einen anderen Pfad umstellen:
# SoftHSM v2 configuration file
directories.tokendir = /home/wladislaw/devtools/softhsm/tokens/
objectstore.backend = file
# ERROR, WARNING, INFO, DEBUG
log.level = DEBUG
Alternativ kann man sich auch eine eigene Config-Datei anlegen und mit export SOFTHSM2_CONF=/home/user/config.file
den Pfad zu dieser bekannt geben. In dieser Datei kann man dann einen benutzerspezifischen Pfad zur Speicherung der Token angeben.
Nun kann man sein virtuelles Token einrichten. Dabei muss man eine User- und SO-Pin vergeben. Währen die User-PIN für den Zugriff auf das Schlüsselmaterial verwendet wird, kommt die Security Officer (SO-)Pin zum Einsatz, wenn man das Gerät zurücksetzen oder andere administrative Tätigkeiten durchführen möchte. Am Ende sollte die Meldung The token has been initialized.
erscheinen.
$ softhsm2-util --init-token --slot 0 --label "wlami Token 1"
*** SO PIN (4-255 characters) ***
Please enter SO PIN:
Please reenter SO PIN:
*** User PIN (4-255 characters) ***
Please enter user PIN:
Please reenter user PIN:
The token has been initialized.
Mit softhsm2-util --show-slots
kann das Ergebnis geprüft werden. Die Werte Token present
und Initialized
sollten beide auf yes
stehen.
$ softhsm2-util --show-slots
Available slots:
Slot 0
Slot info:
Description: SoftHSM slot 0
Manufacturer ID: SoftHSM project
Hardware version: 2.0
Firmware version: 2.0
Token present: yes
Token info:
Manufacturer ID: SoftHSM project
Model: SoftHSM v2
Hardware version: 2.0
Firmware version: 2.0
Serial number: xxx
Initialized: yes
User PIN init.: yes
Label: wlami Token 1
Das Token kann nun eingesetzt werden. Dazu muss man normalerweise in seiner Anwendung, die auf das Token zugreifen will, die tokenspezifische Bibliothek referenzieren. Bei SoftHSM ist dies /usr/local/lib/softhsm/libsofthsm2.so
. Ich verwende für das Schlüssel- und Zertifikats-Management übrigens XCA, das auch PKCS#11 unterstützt und wunderbar mit SoftHSM funktioniert!