重要

这个驱动仍然是一个早期的概念验证实现,只实现了操作TLS服务器所需的功能,例如HTTPS服务器。

使用PKCS#11驱动访问NetHSM#

  1. 下载`PKCS#11驱动<https://github.com/Nitrokey/nethsm-pkcs11>`_用于NetHSM。

  2. 根据你的设置修改配置文件`p11nethsm.conf`(如地址、操作员名称),并将其存放在`$HOME/.nitrokey`,/etc/nitrokey/,或你的应用程序执行的文件夹中。

加密和解密#

在用相应的机制创建一个密钥(这里:ID42)后,你可以用它来加密和解密,但首先你应该创建密钥。

$ KEYID=42
$ HEXID=$(echo ${KEYID}'\c' | xxd -ps)
$ curl -s -X GET https://nethsmdemo.nitrokey.com/api/v1/keys/$KEYID/public.pem -o public.pem

现在你可以加密了。

$ echo 'NetHSM rulez!' | openssl pkeyutl -encrypt -pubin -inkey public.pem -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha512 -pkeyopt rsa_mgf1_md:sha512 -out encrypted.data

…并解密。

$ pkcs11-tool --module p11nethsm.so -v --decrypt --mechanism RSA-PKCS-OAEP --input-file encrypted.data --id $HEXID --hash-algorithm SHA512

签署#

首先再次创建密钥。

$ KEYID=23
$ HEXID=$(echo ${KEYID}'\c' | xxd -ps)
$ curl -s -X GET https://nethsmdemo.nitrokey.com/api/v1/keys/$KEYID/public.pem -o public.pem

在用相应的机制创建一个密钥(这里:ID 23)后,你可以用它来签名。

$ echo 'NetHSM rulez!' | pkcs11-tool --module p11nethsm.so -v --sign --mechanism SHA512-RSA-PKCS-PSS --output-file sig.data --id $HEXID
$ echo 'NetHSM rulez!' | openssl dgst -keyform PEM -verify public.pem -sha512 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -signature sig.data