blog.wlami.com

Virtuelles Zuhause von Wladislaw Mitzel

PKCS#11 Entwicklung ohne Hardware: SoftHSM als Smartcard oder HSM Ersatz

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.

stilisierte Aufnahme eines Smartcard Readers und einer Smartcard

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.

1
2
3
4
5
$ 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:

1
$ sudo apt-get install build-essential openssl libssl-dev

Nach der Installation solltet ihr softhsm2-util testweise aufrufen können:

1
2
$ 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:

1
2
3
4
5
# 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.

1
2
3
4
5
6
7
8
$ 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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ 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!

Kommentieren

Dieses Blog verwendet statische Kommentare. Kommentare werden also per Mail an mich geschickt und erscheinen anschließend im Blog. Eure E-Mail-Adresse wird nicht veröffentlicht.

Kommentar schreiben