Configuration de TLS avec Apache2

Indication

Le même concept que celui décrit ici peut être utilisé pour de nombreuses applications utilisant openssl comme crypto-backend. Le concept se résume principalement à : remplacer le fichier clé (secret) par une URL PKCS#11 référençant une clé sur un jeton de sécurité (Nitrokey).

Préparation

  • Assurez-vous que la version de apache2 est au moins 2.4.42 pour un support correct de mod_ssl.

  • activez mod_ssl en utilisant a2enmod ssl, si ce n’est pas déjà fait

  • De plus, « openssl » est nécessaire et « libengine-pkcs11-openssl », voir PKCS#11 URL.

Configurer Apache2 pour utiliser une clé de sécurité

En gros, la seule chose à faire est de remplacer SSLCertificateFile par l’URL PKCS#11 appropriée et de supprimer toute autre référence aux clés ou aux certificats. Par exemple, SSLCertificateKeyFile n’est plus nécessaire.

Un exemple de directive pourrait ressembler à ceci :

SSLCertificateFile   "pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0123123;token=UserPIN%20%28SmartCard-HSM%29;id%01"

L’URL PKCS#11 appropriée peut être extraite comme indiqué dans Génération d’URL PKCS#11.

Assurez-vous de placer la directive à l’intérieur d’une configuration VirtualHost.

Fournir le PIN pendant le démarrage d’Apache2

En utilisant la méthode décrite précédemment, Apache2 demandera à chaque démarrage le PIN de l’utilisateur, ce qui revient à refuser le démarrage par lot. Apache2 propose une autre directive pour fournir le PIN au démarrage.

SSLPassPhraseDialog     "|/bin/echo 123456"

Apache2 attend un exécutable après |, qui sera exécuté au démarrage et dont la sortie (la nouvelle ligne de fin est attendue) sera utilisée comme PIN. Évidemment, des méthodes complexes et arbitraires de récupération de PIN peuvent être implémentées en utilisant cette approche. Bien qu’ici, un exemple trivial a été choisi pour juste ``échapper”” le PIN pendant le démarrage.

De plus, SSLPassPhraseDialog est une directive globale, qui doit donc être placée dans la configuration globale d’Apache2.

Avertissement

Cet exemple n’est pas un mécanisme sûr pour transmettre votre code PIN, car il sera écrit en clair dans votre configuration.

Consultez la Documentation mod_ssl d’Apache2 pour plus de détails sur cette fonctionnalité.

Exemple complet de configuration d’Apache2

Un extrait complet de la configuration d’Apache2 (VirtualHost) peut ressembler à ceci :

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