Herramienta de línea de comandos Nitropy#

Este tutorial muestra cómo acceder al NetHMS a través de la herramienta de línea de comandos nitropy, que debe descargar e instalar.

Nota

Si utiliza una instancia de demostración de NetHSM con un certificado autofirmado, por ejemplo, utilizando la imagen Docker, tendrá que utilizar la opción --no-verify-tls para nitropy para omitir la comprobación del certificado.

Nota

Primero establezca el valor de $NETHSM_HOST a la dirección IP o URL de su NetHSM. Nuestro servidor de demostración puede ser alcanzado en https://nethsmdemo.nitrokey.com/

Información del dispositivo & Estado#

$ nitropy nethsm --host $NETHSM_HOST info

Host:    localhost:8443
Vendor:  Nitrokey GmbH
Product: NetHSM
$ nitropy nethsm --host $NETHSM_HOST state

NetHSM localhost:8443 is Unprovisioned

Aprovisionamiento#

Un nuevo NetHSM necesita ser aprovisionado primero con frases de contraseña y la hora actual. La Frase de acceso de administrador es la frase de acceso del Administrador, que es el superusuario del NetHSM. La Frase de contraseña de desbloqueo se utiliza para cifrar el almacén de datos confidenciales del NetHSM.

Nota

La instancia de demostración de NetHSM en nethsmdemo.nitrokey.com ya está aprovisionada.

$ nitropy nethsm --host $NETHSM_HOST provision

NetHSM localhost:8443 provisioned

NetHSM puede utilizarse en modo Attended Boot y en modo Unattended Boot.

  • En el modo Attended Boot es necesario introducir la Frase de desbloqueo durante cada arranque, que se utiliza para encriptar el almacén de datos. Por razones de seguridad se recomienda este modo.

  • En el modo Inicio desatendido no se requiere una frase de desbloqueo, por lo que el NetHSM puede iniciarse sin supervisión y el almacén de datos se almacena sin cifrar. Utilice este modo si sus requisitos de disponibilidad no pueden cumplirse con el modo Attended Boot.

Recupera el modo actual:

$ nitropy nethsm --host $NETHSM_HOST get-config --unattended-boot

 Configuration for NetHSM localhost:8443:
 Unattended boot: off

Activa el modo de arranque desatendido:

$ nitropy nethsm --host $NETHSM_HOST set-unattended-boot on

 Updated the unattended boot configuration for NetHSM localhost:8443

Gestión de usuarios#

Roles#

La separación de funciones se puede implementar utilizando los Roles disponibles. Cada cuenta de usuario configurada en el NetHSM tiene asignada una de las siguientes funciones. A continuación se presenta una descripción de alto nivel de las operaciones permitidas por los Roles individuales, para los detalles específicos del punto final por favor consulte la documentación de la API REST.

  • R-Administrador: Una cuenta de usuario con este rol tiene acceso a todas las operaciones proporcionadas por la API REST, con la excepción de las operaciones de uso de claves, es decir, la firma y el descifrado de mensajes.

  • R-Operador: Una cuenta de usuario con este rol tiene acceso a todas las operaciones de uso de claves, a un subconjunto de operaciones de gestión de claves de sólo lectura y a operaciones de gestión de usuarios que sólo permiten cambios en su propia cuenta.

  • R-Metrics: Una cuenta de usuario con este rol sólo tiene acceso a operaciones de métrica de sólo lectura.

  • R-Backup: Una cuenta de usuario con este rol tiene acceso a las operaciones necesarias para iniciar una copia de seguridad del sistema solamente.

Nota: En futuras versiones, es posible que se introduzcan funciones adicionales.

Crear y eliminar usuarios

Ahora cree un nuevo usuario con el rol de operador que pueda ser utilizado para firmar y descifrar datos. Ten en cuenta que el NetHSM asigna un ID de usuario aleatorio si no lo especificamos.

$ nitropy nethsm --host $NETHSM_HOST  add-user --real-name "Jane User" --role Operator

User Operator added to NetHSM localhost:8443
$ nitropy nethsm --host $NETHSM_HOST delete-user "Jane User"

Gestión de claves#

Generar claves#

En esta guía, queremos usar una clave RSA para descifrar datos usando PKCS #1 y para firmar datos con PSS usando SHA256. Así que vamos a generar una nueva clave en el NetHSM. Asegúrate de utilizar el algoritmo RSA y de seleccionar los mecanismos de clave ``RSA_Signature_PSS_SHA256` y ``RSA_Decryption_PKCS1`. Si no se especifica un ID de clave, el NetHSM generará un ID aleatorio para la nueva clave.

$ nitropy nethsm --host $NETHSM_HOST  generate-key --type RSA --mechanism RSA_Signature_PSS_SHA256 --mechanism RSA_Decryption_PKCS1 --length 2048 --key-id myFirstKey

Key myFirstKey generated on NetHSM localhost:8443

Claves de importación#

En lugar de generar una clave en el NetHSM, también puede importar claves privadas existentes al NetHSM:

$ nitropy nethsm --host $NETHSM_HOST  add-key --type RSA --mechanism RSA_Signature_PSS_SHA256 --mechanism RSA_Decryption_PKCS1 --key-id mySecondKey --public-exponent AQAB --prime-p "AOnWFZ+JrI/xOXJU04uYCZOiPVUWd6CSbVseEYrYQYxc7dVroePshz29tc+VEOUP5T0O8lXMEkjFAwjW6C9QTAsPyl6jwyOQluMRIkdN4/7BAg3HAMuGd7VmkGyYrnZWW54sLWp1JD6XJG33kF+9OSar9ETPoVyBgK5punfiUFEL" \
    --prime-q "ANT1kWDdP9hZoFKT49dwdM/S+3ZDnxQa7kZk9p+JKU5RaU9e8pS2GOJljHwkES1FH6CUGeIaUi81tRKe2XZhe/163sEyMcxkaaRbBbTc1v6ZDKILFKKt4eX7LAQfhL/iFlgi6pcyUM8QDrm1QeFgGz11ChM0JuQw1WwkX06lg8iv"

Key mySecondKey added to NetHSM localhost:8443

Lista de claves#

Para asegurarnos de que la clave se ha creado y tiene la configuración correcta del algoritmo y el mecanismo, podemos consultar todas las claves en el NetHSM:

$ nitropy nethsm --host $NETHSM_HOST list-keys
Keys on NetHSM localhost:8443:

Key ID          Algorithm       Mechanisms                                      Operations
----------      ---------       ----------------------------------------------  ----------
myFirstKey      RSA             RSA_Decryption_PKCS1, RSA_Signature_PSS_SHA256  0
mySecondKey     RSA             RSA_Decryption_PKCS1, RSA_Signature_PSS_SHA256  0

Mostrar detalles de la llave#

También podemos consultar la clave pública del par de claves generado:

$ nitropy nethsm --host $NETHSM_HOST get-key myFirstKey

Para poder utilizar la clave con OpenSSL, la exportamos como archivo PEM y la almacenamos como public.pem:

$ nitropy nethsm --host $NETHSM_HOST get-key myFirstKey --public-key > public.pem

Podemos inspeccionar la clave con openssl y utilizarla para el cifrado o la verificación de la firma (como se describe en la siguiente sección):

$ openssl rsa -in public.pem -pubin -text

RSA Public-Key: (2048 bit)
Modulus:
          00:c3:56:f5:09:cc:a9:3e:ca:16:2e:fb:d2:8b:9d:
          a9:33:5a:87:8f:3f:7a:bb:8a:3d:62:9b:5d:56:84:
          95:97:bb:97:f0:77:e2:c8:59:f2:b5:c6:b7:f5:b3:
          76:69:a3:e8:f6:b7:35:f4:3c:52:6d:3c:a0:b6:a1:
          e4:1a:32:05:1d:51:68:21:7d:fc:53:69:ec:bc:0b:
          a0:db:63:b2:0e:47:00:03:4d:98:1f:ab:c0:7b:2e:
          3c:8f:b6:36:ff:f0:db:80:26:f0:a6:af:30:2f:7b:
          16:fd:5c:db:0f:2c:54:8a:26:2b:db:3d:78:49:4b:
          7b:d1:60:ea:a7:f0:b4:5e:fc:33:ff:57:f8:83:fd:
          12:64:8f:29:d1:94:96:9a:15:18:5d:04:ca:1c:29:
          44:ad:42:31:c5:80:38:4c:eb:3b:b8:7e:17:27:5c:
          69:a8:88:44:ea:d1:82:64:fe:51:31:47:97:a7:a9:
          87:c3:13:c9:00:7a:b9:fb:6f:cc:66:4c:07:d7:68:
          fa:78:68:9a:e7:87:1e:94:c6:27:92:5f:f2:7d:11:
          44:11:b5:39:35:59:2c:cd:f9:4f:59:e3:56:93:1f:
          94:20:fd:6b:23:0d:15:e6:4e:bb:84:a8:a5:0d:9f:
          1c:90:ab:a8:10:04:50:12:c1:80:02:94:85:78:df:
          d6:b3
Exponent: 65537 (0x10001)
writing RSA key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw1b1CcypPsoWLvvSi52p
M1qHjz96u4o9YptdVoSVl7uX8HfiyFnytca39bN2aaPo9rc19DxSbTygtqHkGjIF
HVFoIX38U2nsvAug22OyDkcAA02YH6vAey48j7Y2//DbgCbwpq8wL3sW/VzbDyxU
iiYr2z14SUt70WDqp/C0Xvwz/1f4g/0SZI8p0ZSWmhUYXQTKHClErUIxxYA4TOs7
uH4XJ1xpqIhE6tGCZP5RMUeXp6mHwxPJAHq5+2/MZkwH12j6eGia54celMYnkl/y
fRFEEbU5NVkszflPWeNWkx+UIP1rIw0V5k67hKilDZ8ckKuoEARQEsGAApSFeN/W
swIDAQAB
-----END PUBLIC KEY-----

Certificados clave#

Es posible establecer y consultar certificados para las claves almacenadas en una instancia de NetHSM:

$ nitropy nethsm --host $NETHSM_HOST  set-certificate myFirstKey --mime-type application/x-pem-file /tmp/cert.pem

Updated the certificate for key myFirstKey on NetHSM localhost:8443
$ nitropy nethsm --host $NETHSM_HOST get-certificate myFirstKey > /tmp/cert.pem

Solicitudes de firma de certificados clave#

El NetHSM permite generar solicitudes de firma de certificados (CSR) para las claves almacenadas:

$ nitropy nethsm --host $NETHSM_HOST csr --key-id myFirstKey --country DE --state-or-province BE --locality Berlin --organization ACME --organizational-unit IT --common-name example.com --email-address it@example.com

Operaciones clave#

Podemos cifrar los datos de la clave almacenada en el NetHSM utilizando OpenSSL. (public.pem es el archivo de clave pública que creamos en la sección Mostrar detalles de la clave).

$ echo 'NetHSM rulez!' | OpenSSL rsautl -encrypt -inkey public.pem -pubin | base64 > data.crypt
$ nitropy nethsm -h $NETHSM_HOST decrypt -k myFirstKey -d "$(cat data.crypt)" -m PKCS1 | base64 -d

NetHSM rulez!

Del mismo modo, podemos firmar los datos utilizando la clave de la NetHSM. Para RSA y ECDSA, tenemos que calcular primero un compendio:

$ echo 'NetHSM rulez!' > data
$ openssl dgst -sha256 -binary data | base64 > data.digest

A continuación, podemos crear una firma a partir de este compendio utilizando el NetHSM:

$ nitropy nethsm -h $NETHSM_HOST sign -k myFirstKey -m PSS_SHA256 -d "$(cat data.digest)" | base64 -d > data.sig

Y luego usar OpenSSL para verificar la firma:

$ openssl dgst -sha256 -verify public.pem -signature data.sig -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 data

Verified OK

Creación de copias de seguridad#

Es posible crear una copia de seguridad del NetHSM que capture tanto la configuración como las claves almacenadas. Para crear una copia de seguridad, primero hay que establecer una frase de contraseña de copia de seguridad que se utiliza para cifrar el archivo de copia de seguridad:

$ nitropy nethsm -h $NETHSM_HOST -u admin set-backup-passphrase

Updated the backup passphrase for NetHSM localhost:8443

Ahora tienes que crear un usuario con el rol R-Backup:

$ nitropy nethsm -h $NETHSM_HOST -u admin add-user --user-id backup --real-name "Backup User" --role backup

User backup added to NetHSM localhost:8443

Entonces puede generar la copia de seguridad y escribirla en un archivo:

$ nitropy nethsm -h $NETHSM_HOST backup /tmp/nethsm-backup

Backup for localhost:8443 written to /tmp/backup

Restauración de copias de seguridad#

Este archivo de copia de seguridad puede restaurarse en una instancia de NetHSM no aprovisionada:

$ nitropy nethsm -h $NETHSM_HOST restore --backup-passphrase backup-passphrase backupencryptionkey /tmp/nethsm-backup

Backup restored on NetHSM localhost:8443

Actualización de NetHSM#

Advertencia

Se puede producir una pérdida de datos debido a la instalación de una actualización beta.

$ nitropy nethsm --host $NETHSM_HOST  update /tmp/nethsm-update.img.cpio

Image /tmp/nethsm-update.img.cpio uploaded to NetHSM localhost:8443

Si desea continuar con la instalación, ahora puede confirmar la actualización:

$ nitropy nethsm --host $NETHSM_HOST     commit-update

Update successfully committed on NetHSM localhost:8443

También puede cancelar la actualización:

$ nitropy nethsm --host $NETHSM_HOST  cancel-update

Update successfully cancelled on NetHSM localhost:8443