pkcs11-tool¶
É necessário gerar o certificado separadamente e depois carregá-lo no NetHSM. Se o certificado no disco e a chave no NetHSM não corresponderem, o httpd não será iniciado.
É necessário passar a localização do módulo PKCS#11 a ser utilizado com a opção --module
:
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so
Selecione o modelo de certificado que pretende emitir e confirme com <x id=»67»></x>OK<x id=»71»></x>.
You can test if the module is working with the next command:
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --show-info
You should see something like this:
Cryptoki version 2.40
Manufacturer Nitrokey
Library Nitrokey PKCS#11 library (ver 0.1)
List Slots¶
A informação sobre as ranhuras disponíveis. Os slots listados dependem da configuração da matriz de slots no ficheiro de configuração p11nethsm.conf. Para saber mais sobre a configuração dos slots, consulte o capítulo Configuração <pkcs11-setup.html#Configuration>`_ .
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --list-slots
Slot 0 (0x0): NetHSM
token label : LocalHSM
token manufacturer : Nitrokey GmbH
token model : NetHSM
token flags : rng, token initialized, PIN initialized
hardware version : 0.1
firmware version : 0.1
serial num : unknown
pin min/max : 0/0
Nota
Se a sua configuração suporta mais do que uma ranhura, poderá ter de adicionar a opção --slot <arg>
nos comandos pkcs11-tool para utilizar a ranhura correta.
IDs de chave¶
O pkcs11-tool utiliza um ID de chave hexadecimal para identificar as chaves. O NetHSM utiliza cadeias de caracteres alfanuméricas como ID de chave. O módulo PKCS#11 do NetHSM utiliza os valores de byte brutos da cadeia para formar o ID PKCS#11. Pode obter a versão hexadecimal de uma chave NetHSM com xxd
:
echo -n "MyKey" | xxd -p
4d794b6579
Pode então passar este valor hexadecimal para o pkcs11-tool com a opção --id
.
Generate a Key¶
Gerar um par de chaves e armazená-lo no NetHSM.
Nota
A ranhura que pretende utilizar tem de ter um utilizador andministrator no ficheiro de configuração. Caso contrário, receberá um erro CKR_USER_NOT_LOGGED_IN.
RSA¶
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --keypairgen --key-type rsa:2048 --label "rsakey"
ECDSA¶
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --keypairgen --key-type EC:prime256v1 --label "eckey"
AES/Generic¶
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --keygen --key-type AES:256 --label "aeskey"
Chaves de Lista¶
List the keys stored on the NetHSM.
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --list-objects
Using slot 0 with a present token (0x0)
Public Key Object; RSA 2048 bits
label: rsakey
ID: 7273616b6579
Usage: none
Access: none
Private Key Object; RSA
label: rsakey
ID: 7273616b6579
Usage: decrypt, sign
Access: sensitive, always sensitive, never extractable
Ler Chaves¶
Ler a chave pública de um par de chaves armazenado no NetHSM. Não é possível ler chaves privadas do NetHSM.
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --read-object --type pubkey --label rsakey --output-file rsakey.pub
O certificado do par de chaves pode ser lido com o mesmo comando, alterando a opção --type
para cert
.
Nota
A saída está no formato DER.
Write Keys¶
Escrever uma chave privada no NetHSM. A chave pública é automaticamente derivada da chave privada.
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --write-object rsakey.key --type privkey --id 7273616b6579
O certificado do par de chaves pode ser escrito com o mesmo comando, alterando a opção --type
para cert
.
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --write-object rsakey.crt --type cert --id 7273616b6579
Encrypt¶
A encriptação de dados só é suportada para chaves AES.
echo "NetHSM rulez! " | pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --encrypt --id 6165736b6579 --mechanism AES_CBC --output-file encrypted.txt
Nota
É necessário preencher manualmente os dados de entrada com o tamanho do bloco da chave AES.
Decifrar¶
AES¶
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --decrypt --id 6165736b6579 --mechanism AES_CBC --input-file encrypted.txt
RSA¶
É possível encriptar dados com a chave pública e desencriptá-los com a chave privada.
# get the public key first
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --read-object --type pubkey --id 7273616b6579 --output-file public.der
# encrypt some data with OpenSSL
echo 'NetHSM rulez!NetHSM rulez!' | openssl pkeyutl -encrypt -pubin -inkey public.der -keyform DER -out data.crypt
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --decrypt --id 7273616b6579 --mechanism RSA-PKCS --input-file data.crypt
Assine¶
echo "NetHSM rulez!" | openssl dgst -sha256 -binary | pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --sign --label rsakey --mechanism RSA-PKCS-PSS --hash-algorithm SHA256 --output-file data.sig --signature-format openssl
Para verificar a assinatura com o OpenSSL:
# get the public key
pkcs11-tool --module /usr/lib/nitrokey/libnethsm_pkcs11.so --read-object --type pubkey --label rsakey --output-file public.der
echo 'NetHSM rulez!' | openssl dgst -keyform DER -verify public.der -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -signature data.sig