Apache#

Puede configurar Apache httpd 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 ` <#example>` __.

Configuración de OpenSSL#

Configure el motor OpenSSL siguiendo la guía de configuración del motor OpenSSL de ` <openssl.html#engine>` __. (Los proveedores OpenSSL aún no son compatibles con httpd de Apache).

Configuración Httpd#

Añada las siguientes líneas a su httpd.conf :

Listen 443
#...
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
#...

<VirtualHost *:443>
    DocumentRoot /usr/local/apache2/htdocs
    SSLEngine on
    SSLCertificateFile /certs/certificate.pem
    SSLCertificateKeyFile "pkcs11:object=webserver"
    ErrorLog /tmp/a-error.log
    CustomLog /tmp/a-access.log combined
</VirtualHost>

El SSLCertificateFile debe apuntar a un archivo de certificado en el disco.

El SSLCertificateKeyFile debe ser un PKCS#11 URI que apunte a la clave privada en el NetHSM.

Nota

Debe generar el certificado por separado y luego cargarlo en el NetHSM. Si el certificado en el disco y la clave en el NetHSM no coinciden, httpd 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 (véase Setup) o proporcionarla en la configuración de httpd:

SSLCertificateKeyFile "pkcs11:object=webserver;type=private;pin=opPassphrase";

Ejemplo#

Si quieres experimentar con el ejemplo ` <https://github.com/Nitrokey/nethsm-pkcs11/tree/main/container/apache>` __ 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.

  1. Configure un NetHSM, ya sea uno real o un contenedor. Consulte la guía de inicio ` <getting-started.html>` __ para obtener más información. Además de un administrador, vas a necesitar una cuenta de operador.

  2. Descargue e instale la última versión del controlador nethsm-pkcs11 disponible desde aquí.

  3. Instale el motor PKCS11 de OpenSSL como se describe en el Manual de OpenSSL ` <openssl.html>` __. No es necesario crear un archivo de configuración.

  4. Ajuste las variables HOST, ADMIN_ACCOUNT y ADMIN_ACCOUNT_PWD en container/apache/generate.sh de forma que HOST contenga la URL y el puerto de su NetHSM, ADMIN_ACCOUNT contenga el nombre de usuario de una cuenta de administrador y ADMIN_ACCOUNT_PWD la contraseña correspondiente. Configure además la ruta absoluta del motor PKCS11 de OpenSSL en OPENSSL_PKCS11_ENGINE_PATH y la ruta absoluta de la biblioteca PKCS11 de NetHSM en NETHSM_PKCS11_LIBRARY_PATH.

  5. Cree un archivo de configuración PKCS11 de NetHSM en una de las ubicaciones conocidas de ` <pkcs11-setup.html#configuration>` __, 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.

  6. Actualice la configuración PKCS11 en container/apache/p11nethsm.conf con su URL NetHSMs y credenciales de operador válidas.

  7. Genere el certificado y la clave.

./container/apache/generate.sh
  1. Construye el contenedor.

docker build -f container/apache/Dockerfile . -t pkcs-httpd
  1. Ejecuta el contenedor.

docker run -p 9443:443 -p 9080:80 pkcs-httpd

La página de prueba de Apache estará disponible en https://localhost:9443/. Tenga en cuenta que su navegador, con suerte, le advertirá de que el certificado del sitio web es autofirmado.