Nginx#
Puede configurar nginx para utilizar NetHSM a través del motor OpenSSL que, a su vez, utiliza el módulo PKCS#11 de NetHSM.
El archivo del certificado debe estar en el disco, pero la clave privada puede utilizarse desde el NetHSM.
Encontrará un ejemplo completo en.
Configuración de OpenSSL#
Configure el motor OpenSSL siguiendo la guía de configuración del motor OpenSSL.
Los proveedores aún no están soportados por Nginx.
Nota
Usar el motor OpenSSL libp11 versión 0.4.12 o anterior y un NetHSM con muchas claves hará que la carga inicial de Nginx sea lenta (más de un minuto para mil claves). Se recomienda usar la versión 0.4.13 o más reciente o construir el motor desde source.
Configuración de Nginx#
ssl_engine pkcs11;
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /certs/certificate.pem;
ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10s;
ssl_session_tickets off;
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers off;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
El ssl_certificate
debe apuntar a un archivo de certificado en el disco.
El ssl_certificate_key
puede ser una configuración OpenSSL. Aquí utilizamos el motor OpenSSL con el módulo PKCS#11 y seleccionamos la clave privada con la etiqueta/ID webserver
y el tipo de clave private
.
ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private";
Nota
Debe generar el certificado por separado y luego subirlo al NetHSM. Si el certificado en el disco y la clave en el NetHSM no coinciden nginx no se iniciará.
libnethsm_pkcs11 Configuración#
slots:
- label: LocalHSM
description: Local HSM (docker)
url: "https://192.168.3.161:8443/api/v1"
operator:
username: "operator"
password: "opPassphrase"
Para asegurar la contraseña puede proporcionarla a través de una variable de entorno) o proporcionarla en la configuración de nginx:
ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private;pin=opPassphrase";
Ejemplo#
Si quieres experimentar con el ejemplo usa git para clonar el repositorio nethsm-pkcs11 y ejecuta los siguientes comandos:
Advertencia
Al ejecutar el script de generación se borra la clave webserver
y se sustituye.
Configure un NetHSM, ya sea uno real o un contenedor. Consulte la guía de inicio para obtener más información. Además de un administrador, vas a necesitar una cuenta de operador.
Descargue e instale la última versión del controlador nethsm-pkcs11 disponible desde aquí.
Instale el motor PKCS11 de OpenSSL como se describe en el Manual de OpenSSL. No es necesario crear un archivo de configuración.
Ajuste las variables
HOST
,ADMIN_ACCOUNT
yADMIN_ACCOUNT_PWD
encontainer/nginx/generate.sh
de forma queHOST
contenga la URL y el puerto de su NetHSM,ADMIN_ACCOUNT
contenga el nombre de usuario de una cuenta de administrador yADMIN_ACCOUNT_PWD
la contraseña correspondiente. Configure además la ruta absoluta del motor PKCS11 de OpenSSL enOPENSSL_PKCS11_ENGINE_PATH
y la ruta absoluta de la biblioteca PKCS11 de NetHSM enNETHSM_PKCS11_LIBRARY_PATH
.Cree un archivo de configuración PKCS11 de NetHSM en una de las ubicaciones conocidas de, por ejemplo,
/etc/nitrokey/p11nethsm.conf
. Debe tener configurada una cuenta de operador y utilizar la misma instancia de NetHSM especificada anteriormente en el script generate.Actualice la configuración PKCS11 en
container/nginx/p11nethsm.conf
con su URL NetHSMs y credenciales de operador válidas.Genere el certificado y la clave.
./container/nginx/generate.sh
Construye el contenedor.
docker build -f container/nginx/Dockerfile . -t pkcs-nginx
Ejecuta el contenedor.
docker run -p 9443:443 -p 9080:80 pkcs-nginx
La página de prueba de NGINX estará disponible en https://localhost:9443/. Tenga en cuenta que su navegador, con suerte, le advertirá de que el certificado de los sitios web es autofirmado.