Apache#

È possibile configurare Apache httpd per utilizzare NetHSM tramite il motore OpenSSL che utilizza il modulo PKCS#11 di NetHSM.

Il file del certificato deve essere sul disco, ma la chiave privata può essere utilizzata dal NetHSM.

Un esempio completo è disponibile sotto.

Configurazione di OpenSSL#

Configurare il motore OpenSSL seguendo la guida all’installazione di OpenSSL Engine (i provider OpenSSL non sono ancora supportati da Apache httpd).

Configurazione Httpd#

Aggiungete le seguenti righe al vostro 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>

Il campo SSLCertificateFile deve puntare a un file di certificato sul disco.

SSLCertificateKeyFile dovrebbe essere un URI PKCS#11 ` <https://www.rfc-editor.org/rfc/rfc7512>`__ che punta alla chiave privata nel NetHSM.

Nota

È necessario generare il certificato separatamente e poi caricarlo sul NetHSM. Se il certificato su disco e la chiave nel NetHSM non corrispondono, httpd non si avvia.

libnethsm_pkcs11 Configurazione#

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

Per proteggere la password è possibile fornirla tramite una variabile d’ambiente (vedere Passwords) o fornirla nella configurazione di httpd:

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

Esempio#

Se volete sperimentare l’esempio ` <https://github.com/Nitrokey/nethsm-pkcs11/tree/main/container/apache>`__ usate git per clonare il repository nethsm-pkcs11 ed eseguite i seguenti comandi:

Avvertimento

L’esecuzione dello script generate cancella la chiave webserver e la sostituisce.

  1. Configurare un NetHSM, sia esso reale o un contenitore. Per ulteriori informazioni, consultare la guida per iniziare. Oltre a un amministratore, è necessario un account operatore.

  2. Scaricare e installare l’ultima versione del driver nethsm-pkcs11 disponibile qui.

  3. Installare il motore OpenSSL PKCS11 come descritto nel Manuale OpenSSL ` <openssl.html>`__. Non è necessario creare un file di configurazione.

  4. Regolare le variabili HOST, ADMIN_ACCOUNT e ADMIN_ACCOUNT_PWD in container/apache/generate.sh in modo che HOST contenga l’URL e la porta del NetHSM, ADMIN_ACCOUNT contenga il nome utente dell’account amministratore e ADMIN_ACCOUNT_PWD la password corrispondente. Configurare inoltre il percorso assoluto del motore OpenSSL PKCS11 in OPENSSL_PKCS11_ENGINE_PATH e il percorso assoluto della libreria PKCS11 di NetHSM in NETHSM_PKCS11_LIBRARY_PATH.

  5. Creare un file di configurazione NetHSM PKCS11 in una delle posizioni note, ad esempio, /etc/nitrokey/p11nethsm.conf. Deve essere configurato un account operatore e utilizzare la stessa istanza di NetHSM specificata nello script di generazione precedente.

  6. Aggiornare la configurazione PKCS11 in container/apache/p11nethsm.conf con l’URL di NetHSMs e le credenziali valide dell’operatore.

  7. Generare il certificato e la chiave.

./container/apache/generate.sh
  1. Costruire il contenitore.

docker build -f container/apache/Dockerfile . -t pkcs-httpd
  1. Eseguire il contenitore.

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

La pagina di test di Apache sarà disponibile all’indirizzo https://localhost:9443/. Si spera che il browser avverta che il certificato del sito web è autofirmato.