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.