François' Blog

IndieCert and Nitrokey

Published on 2015-04-07

Finally I managed to get het Nitrokey working with IndieCert. It is not as smooth as expected and requires a fair bit of work, but here you can find the steps required.

Requirements

The documentation for Nitrokey seems scattered or lacking a bit. Below I will describe what to do on the latest Fedora (21) release.

PCSC

You need to install two packages to get started and recognize the Nitrokey:

$ sudo yum -y install opensc.x86_64 pcsc-lite.x86_64

Now you can make the PCSC daemon start on system boot

$ sudo systemctl enable pcscd.service

pcscd is socket activated, so no need to start it, it will be activated when you plug in the Nitrokey. If you already plugged in the stick remove it and plug it in again...

To check if everything is working use openpgp-tool:

$ openpgp-tool 
Using reader with a card: German Privacy Foundation Crypto Stick v2.0 (0000000000000) 00 00
Language:  de
Gender:    not applicable
$ 

This should be all!

Firefox

Next you need to enable the OpenSC PKCS#11 driver in Firefox. The library to load is located at /usr/lib64/opensc-pkcs11.so. In Firefox go to "Preferences" -> "Advanced" -> "Certificates" -> "Security Devices" -> "Load", and then enter this path in the "Module filename" box.

That should be all for Firefox!

Approach

It doesn't seem possible to generate a self signed certificate on the Nitrokey, it is possible to generate a private and public key on the device, and then hook it up to OpenSSL somehow to generate a CSR, but I'm not sure if it is possible at that time to immediately generate a self signed certificate.

So, the next obvious choice would be to use the normal IndieCert flow and generate a certificate in the browser and export that. This is really not a good idea, but it seems the only thing possible right now.

So in order to do that, go to https://indiecert.net/ and follow the normal flow to enroll. Once enrollment is done and the certificate is stored in the browser export it to a PKCS#12 file. This can then on the command line be imported in the stick.

You can export the certificate and private key by going to "Preferences" -> "Advanced" -> "Certificates" -> "View Certificates" -> "Your Certificates". Select the one generated by IndieCert and click "Backup...". Firefox will ask for a file path, I used indiecert.p12 and a password, remember this password for later to import the PKSC#12 file in the Nitrokey.

We assume you exported the certificate to indiecert.p12. The default "Admin PIN" is 12345678. The default "User PIN" is 123456. Now import it in the key:

pkcs15-init --delete-objects privkey,pubkey --id 3 --store-private-key indiecert.p12 --format pkcs12 --auth-id 3 --verify-pin

This is the output, you will also be asked to enter both the "Admin PIN" of the Nitrokey, and the password you provided when exporting the PKCS#12 file in Firefox.

Using reader with a card: German Privacy Foundation Crypto Stick v2.0 (0000000000000) 00 00
User PIN required.
Please enter User PIN [Admin PIN]: 
Deleted 2 objects
error:23076071:PKCS12 routines:PKCS12_parse:mac verify failure
Please enter passphrase to unlock secret key: 
Importing 1 certificates:
  0: /CN=4fad073b801ab6bf0bc21efc0092c625

This now makes it possible to use it in Firefox!

Thanks

Special thanks to elf Pavlik for the motivation and @gamamb for providing the Nitrokey for testing!

References

History