4.3. Usando HSMs protegendo chaves privadas em Apache e Nginx
Os servidores HTTP Apache
e Nginx
podem trabalhar com chaves privadas armazenadas em módulos de segurança de hardware (HSMs), o que ajuda a evitar a revelação das chaves e ataques "man-in-the-middle". Note que isto normalmente requer HSMs de alto desempenho para servidores ocupados.
Apache
Servidor HTTP
Para uma comunicação segura na forma do protocolo HTTPS, o servidor Apache
HTTP (httpd
) utiliza a biblioteca OpenSSL. A OpenSSL não suporta o PKCS #11 nativamente. Para utilizar HSMs, é necessário instalar o pacote openssl-pkcs11
, que fornece acesso aos módulos PKCS #11 através da interface do motor. Você pode usar um URI PKCS #11 em vez de um nome de arquivo comum para especificar uma chave de servidor e um certificado no arquivo de configuração /etc/httpd/conf.d/ssl.conf
, por exemplo:
SSLCertificateFile "pkcs11:id=%01;token=softhsm;type=cert" SSLCertificateKeyFile "pkcs11:id=%01;token=softhsm;type=private?pin-value=111111"
Instale o pacote httpd-manual
para obter a documentação completa para o Servidor HTTP Apache
, incluindo a configuração TLS. As diretrizes disponíveis no arquivo de configuração /etc/httpd/conf.d/ssl.conf
são descritas em detalhes em /usr/share/httpd/manual/mod/mod_ssl.html.
Nginx
Servidor HTTP e proxy
Como Nginx
também usa o OpenSSL para operações criptográficas, o suporte para o PKCS #11 deve passar pelo motor openssl-pkcs11
. Nginx
atualmente suporta apenas o carregamento de chaves privadas de um HSM, e um certificado deve ser fornecido separadamente como um arquivo regular. Modifique as opções ssl_certificate
e ssl_certificate_key
na seção server
do arquivo de configuração /etc/nginx/nginx.conf
:
ssl_certificate /path/to/cert.pem ssl_certificate_key "engine:pkcs11:pkcs11:token=softhsm;id=%01;type=private?pin-value=111111";
Note que o prefixo engine:pkcs11:
é necessário para o PKCS #11 URI no arquivo de configuração Nginx
. Isto porque o outro prefixo pkcs11
se refere ao nome do motor.