Configuração de TLS com Apache2#
⨯ |
⨯ |
⨯ |
⨯ |
✓ |
⨯ |
⨯ |
⨯ |
Dica
O mesmo conceito aqui descrito pode ser usado para muitas aplicações usando openssl como crypto-backend. O conceito resume-se principalmente a: substituir (secreto) ficheiro-chave por PKCS#11 URL referenciando uma chave num código de segurança (Nitrokey)
Preparação#
assegure-se de que a versão apache2 é pelo menos 2.4.42 para o próprio
mod_ssl
suporteactivar
mod_ssl
usandoa2enmod ssl
, se ainda não tiver sido feitoadicionalmente
openssl`
é necessário e`x id="41"></x>>
ver PKCS#11 URL
Configurar o Apache2 para usar uma chave de segurança#
Basicamente a única coisa a fazer é substituir SSLCertificateFile
pela URL apropriada PKCS#11 e apagar quaisquer outras referências a chaves ou certificados. Por exemplo, SSLCertificateKeyFile`
já não é necessário.
Um exemplo de directiva pode parecer-se com isto:
SSLCertificateFile "pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0123123;token=UserPIN%20%28SmartCard-HSM%29;id%01"
A URL apropriada PKCS#11 pode ser extraída como documentado em PKCS#11 URL Generation
Certifique-se de colocar a diretriz dentro de uma configuração VirtualHost.
Fornecer PIN durante a inicialização do Apache2#
Usando o método descrito anteriormente, o Apache2 irá perguntar em cada inicialização para o User-PIN, diminuindo assim basicamente a inicialização em lote. O Apache2 fornece outra diretiva para fornecer o PIN durante a inicialização.
SSLPassPhraseDialog "|/bin/echo 123456"
O Apache2 espera um executável após |
, que será executado durante a inicialização e a saída do Apache’s (espera-se uma nova linha de saída) será usada como PIN. Obviamente métodos complexos arbitrários de recuperação de PIN podem ser implementados usando esta abordagem. Embora aqui um exemplo trivial tenha sido escolhido para apenas echo
o PIN durante a inicialização.
Além disso SSLPassPhraseDialog`
é uma diretiva global, portanto tem que ser colocada no escopo de configuração global no Apache2.
Aviso
Este exemplo não é um mecanismo seguro para passar seu PIN, pois ele será escrito em texto simples dentro de sua configuração
Veja a Apache2 mod_ssl documentation para mais detalhes sobre esta funcionalidade.
Exemplo de configuração completo do Apache2#
Um completo Apache2 (VirtualHost
) pode ser parecido com isto:
<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>