OpenSSL#

Advertencia

Al intentar recuperar la clave privada se bloqueará OpenSSL. Esto es normal porque las claves privadas no pueden extraerse de un NetHSM. Es posible que desee recuperar la clave pública en su lugar (véase el ejemplo a continuación).

Motor#

Advertencia

Cuando se utiliza un motor (libp11) de versión 0.4.12 o anterior, tener una clave EdDSA en el NetHSM hará que OpenSSL no encuentre ninguna clave. En la versión 0.4.12 y anteriores, el motor enumera todas las claves en el NetHSM cuando se solicita una clave. Para buscar una clave por etiqueta o id, se recomienda utilizar la versión 0.4.13 o posterior, o compilar libp11 desde el código fuente. El binario del motor estará en src/.libs/pkcs11.so.

La interfaz del motor OpenSSL es la forma antigua de implementar backends personalizados para OpenSSL y está obsoleta en OpenSSL 3. Esta sigue siendo la forma más estable de utilizar NetHSM con OpenSSL.

Tendrá que configurar el módulo PKCS#11, siguiendo estas instrucciones.

Instala el motor:

apt install libengine-pkcs11-openssl

A continuación, debe configurar OpenSSL para utilizar el motor. Esto se hace añadiendo las siguientes líneas a su openssl.cnf archivo:

openssl_conf = openssl_init

[openssl_init]
engines = engine_section

[engine_section]
pkcs11 = pkcs11_section

[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so
MODULE_PATH = /usr/lib/x86_64-linux-gnu/pkcs11/libnethsm_pkcs11.so
init = 0

Nota

Puede especificar a OpenSSL la ruta del archivo de configuración de OpenSSL utilizando la variable de entorno OPENSSL_CONF.

Advertencia

Si el archivo de configuración principal de OpenSSL se modifica para contener sólo estas líneas, podría romper otros programas que utilizan OpenSSL. Por lo tanto, es posible que desee crear un archivo de configuración independiente para el motor.

Sustituya /usr/lib/x86_64-linux-gnu/pkcs11/libnethsm_pkcs11.so por la ruta al módulo PKCS#11 que instaló anteriormente.

Sustituya /usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so por la ruta al motor OpenSSL que haya instalado. La ruta varía en función de su distribución. El número en engines-3 corresponde a su versión de OpenSSL. En Debian la ruta para el motor OpenSSL 3 es /usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so; para Fedora es /usr/lib64/engines-3/libpkcs11.so.

Ahora puede utilizar claves en el NetHSM utilizando PKCS#11 URIs, ejemplo:

engine:pkcs11:pkcs11:object=webserver;type=private

Se utilizará la clave webserver.

Nota

Puede utilizar el comando p11tool de GnuTLS <https://gnutls.org/> para obtener el URI completo de las claves:

p11tool --provider /usr/lib/x86_64-linux-gnu/pkcs11/libnethsm_pkcs11.so --list-all

Ejemplo de orden#

Recuperar la clave pública de un par de claves asimétricas en el NetHSM :

openssl pkey -engine pkcs11 -inform ENGINE -in "pkcs11:object=webserver;type=public" -pubout

Proveedor#

La interfaz OpenSSL provider es la nueva forma de implementar backends personalizados para OpenSSL. El backend pkcs11-provider se encuentra aún en una fase temprana de desarrollo.

Tendrá que configurar el módulo PKCS#11, siguiendo estas instrucciones.

Instale el proveedor. Para Fedora existe un paquete llamado pkcs11-provider. Para otras distribuciones de Linux tendrá que construirlo desde el código fuente.

A continuación, debe configurar OpenSSL para que utilice el proveedor. Esto se hace añadiendo las siguientes líneas a su openssl.cnf archivo:

openssl_conf = openssl_init

[openssl_init]
providers = provider_sect

[provider_sect]
pkcs11 = pkcs11_sect

[pkcs11_sect]
module = /home/sautax/git/pkcs11-provider/src/.libs/pkcs11.so
pkcs11-module-path = /usr/lib/libnethsm_pkcs11.so
activate = 1

Establezca module en la ruta del proveedor que instaló y pkcs11-module-path en la ruta del módulo PKCS#11 que instaló.

Si desea establecer NetHSM como proveedor predeterminado, puede añadir default = pkcs11 a la sección provider_sect.

Nota

Puede especificar a OpenSSL la ruta del archivo de configuración de OpenSSL utilizando la variable de entorno OPENSSL_CONF.

Advertencia

Si el archivo de configuración principal de OpenSSL se modifica para contener sólo estas líneas, podría romper otros programas que utilizan OpenSSL. Por lo tanto, es posible que desee crear un archivo de configuración independiente para el proveedor.

A continuación, puede utilizar claves en el NetHSM utilizando PKCS#11 URIs, ejemplo:

openssl pkey -provider pkcs11 -in "pkcs11:object=rsakey" -pubout

Si establece NetHSM como proveedor predeterminado, puede omitir el argumento -provider pkcs11.

Nota

Actualmente, cuando se establece manualmente un tipo de clave en el URI, el proveedor no podrá encontrar la clave. Puede omitir la parte ;type=private o ;type=public del URI para que funcione.