Configuration de TLS avec Apache2

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

inactive

inactive

active

inactive

inactive

inactive

inactive

inactive

Indication

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

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>