Configuración de TLS con Apache2#
Consejo
El mismo concepto descrito aquí puede ser utilizado para muchas aplicaciones que utilizan openssl como crypto-backend. El concepto se reduce principalmente a: reemplazar el archivo de claves (secreto) con la URL PKCS#11 que hace referencia a una clave en un token de seguridad (Nitrokey)
Preparación#
asegúrese de que la versión de apache2 es al menos 2.4.42 para un correcto soporte de
mod_ssl
.activar
mod_ssl
utilizandoa2enmod ssl
, si no se ha hecho yaadicionalmente
openssl
es necesario ylibengine-pkcs11-openssl
ver PKCS#11 URL
Configurar Apache2 para usar una clave de seguridad#
Básicamente lo único que hay que hacer es sustituir SSLCertificateFile
por la URL PKCS#11 adecuada y eliminar cualquier otra referencia a claves o certificados. Por ejemplo, SSLCertificateKeyFile
ya no es necesario.
Un ejemplo de directiva podría ser el siguiente:
SSLCertificateFile "pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0123123;token=UserPIN%20%28SmartCard-HSM%29;id%01"
La URL PKCS#11 adecuada puede extraerse como se documenta en Generación de la URL PKCS#11.
Asegúrese de colocar la directiva dentro de una configuración VirtualHost.
Proporcionar el PIN durante el arranque de Apache2#
Usando el método descrito anteriormente, Apache2 pedirá el PIN de usuario en cada arranque, por lo que básicamente declina el arranque por lotes. Apache2 proporciona otra directiva para proporcionar el PIN durante el arranque.
SSLPassPhraseDialog "|/bin/echo 123456"
Apache2 espera un ejecutable después de |
, que se ejecutará durante el arranque y su salida (se espera una nueva línea al final) se utilizará como PIN. Obviamente, se pueden implementar métodos de recuperación de PIN arbitrarios y complejos utilizando este enfoque. Aunque aquí se ha elegido un ejemplo trivial para simplemente echo
el PIN durante el arranque.
Además, SSLPassPhraseDialog
es una directiva global, por lo que debe colocarse en el ámbito de configuración global de Apache2.
Advertencia
Este ejemplo mostrado no es un mecanismo seguro para pasar su PIN, ya que será escrito en texto plano dentro de su configuración
Consulte la Documentación sobre mod_ssl de Apache2 para obtener más detalles sobre esta función.
Ejemplo de configuración completa de Apache2#
Un fragmento de configuración completo de Apache2 (VirtualHost
) podría tener este aspecto:
<IfModule mod_ssl.c>
SSLPassPhraseDialog "|/bin/echo 123456"
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile "pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0105076;token=UserPIN%20%28SmartCard-HSM%29"
#SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>