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.

Configuración de OpenSSL#

Configure el motor OpenSSL siguiendo la guía de configuración del motor OpenSSL de. (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 Passwords) o proporcionarla en la configuración de httpd:

SSLCertificateKeyFile "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.

  1. 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.

  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. 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, 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.