Configuração de TLS com Apache2

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

inactive

inactive

active

inactive

inactive

inactive

inactive

inactive

Dica

The very same concept as descriped here can be used for many applications using openssl as crypto-backend. The concept mostly boils down to: replace (secret) key-file with PKCS#11 URL referencing a key on a security token (Nitrokey).

Preparação

  • assegure-se de que a versão apache2 é pelo menos 2.4.42 para o próprio mod_ssl suporte

  • activar mod_ssl usando a2enmod ssl, se ainda não tiver sido feito

  • adicionalmente 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>