Apache

Vous pouvez configurer Apache httpd pour utiliser NetHSM via le moteur OpenSSL qui utilise alors le module PKCS#11 de NetHSM.

Le fichier de certificat doit se trouver sur le disque, mais la clé privée peut être utilisée à partir du NetHSM.

Un exemple complet est disponible à l’adresse ci-dessous.

Configuration d’OpenSSL

Configurez le moteur OpenSSL en suivant le guide d’installation du moteur OpenSSL. (Les fournisseurs OpenSSL ne sont pas encore pris en charge par Apache httpd).

Configuration Httpd

Ajoutez les lignes suivantes à votre httpd.conf :

Listen 443
#...
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
#...

<VirtualHost *:443>
    DocumentRoot /usr/local/apache2/htdocs
    SSLEngine on
    SSLCertificateFile /certs/certificate.pem
    SSLCertificateKeyFile "pkcs11:object=webserver"
    ErrorLog /tmp/a-error.log
    CustomLog /tmp/a-access.log combined
</VirtualHost>

L’adresse SSLCertificateFile doit pointer vers un fichier de certificat sur le disque.

Le SSLCertificateKeyFile doit être un PKCS#11 URI pointant vers la clé privée dans le NetHSM.

Note

Vous devez générer le certificat séparément, puis le télécharger dans le NetHSM. Si le certificat sur le disque et la clé dans le NetHSM ne correspondent pas, httpd ne démarrera pas.

libnethsm_pkcs11 Configuration

slots:
  - label: LocalHSM
    description: Local HSM (docker)
    url: "https://192.168.3.161:8443/api/v1"
    operator:
      username: "operator"
      password: "opPassphrase"

Pour sécuriser le mot de passe, vous pouvez le fournir via une variable d’environnement (voir Passwords) ou le fournir dans la configuration de httpd :

SSLCertificateKeyFile "pkcs11:object=webserver;type=private;pin=opPassphrase";

Exemple

Si vous voulez expérimenter avec l’exemple donné utilisez git pour cloner le dépôt nethsm-pkcs11 et exécutez les commandes suivantes :

Avertissement

L’exécution du script de génération supprime la clé webserver et la remplace.

  1. Configurer un NetHSM, soit un vrai, soit un conteneur. Voir le guide de démarrage pour plus d’informations. En plus d’un administrateur, vous aurez besoin d’un compte opérateur.

  2. Téléchargez et installez la dernière version du pilote nethsm-pkcs11 disponible ici.

  3. Installez le moteur PKCS11 d’OpenSSL comme décrit dans le manuel OpenSSL Manual. Il n’est pas nécessaire de créer un fichier de configuration.

  4. Ajustez les variables HOST, ADMIN_ACCOUNT et ADMIN_ACCOUNT_PWD dans container/apache/generate.sh de telle sorte que HOST contienne l’URL et le port de votre NetHSM, ADMIN_ACCOUNT contienne le nom d’utilisateur d’un compte administrateur et ADMIN_ACCOUNT_PWD le mot de passe correspondant. Configurez également le chemin absolu du moteur PKCS11 d’OpenSSL dans OPENSSL_PKCS11_ENGINE_PATH et le chemin absolu de la bibliothèque PKCS11 de NetHSM dans NETHSM_PKCS11_LIBRARY_PATH.

  5. Créez un fichier de configuration PKCS11 NetHSM dans l’un des emplacements connus, par exemple /etc/nitrokey/p11nethsm.conf. Il doit avoir configuré un compte opérateur et utiliser la même instance NetHSM que celle spécifiée dans le script de génération précédent.

  6. Mettez à jour la configuration PKCS11 dans container/apache/p11nethsm.conf avec l’URL de votre NetHSMs et les informations d’identification de l’opérateur.

  7. Générer le certificat et la clé.

./container/apache/generate.sh
  1. Construire le conteneur.

docker build -f container/apache/Dockerfile . -t pkcs-httpd
  1. Exécuter le conteneur.

docker run -p 9443:443 -p 9080:80 pkcs-httpd

La page de test d’Apache sera disponible à l’adresse suivante : https://localhost:9443/. Notez que votre navigateur, si tout va bien, vous avertira que le certificat du site web est auto-signé.