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.
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.
Scaricare e installare l’ultima versione del driver nethsm-pkcs11 disponibile qui.
Installare il motore OpenSSL PKCS11 come descritto nel Manuale OpenSSL ` <openssl.html>`__. Non è necessario creare un file di configurazione.
Regolare le variabili
HOST
,ADMIN_ACCOUNT
eADMIN_ACCOUNT_PWD
incontainer/apache/generate.sh
in modo cheHOST
contenga l’URL e la porta del NetHSM,ADMIN_ACCOUNT
contenga il nome utente dell’account amministratore eADMIN_ACCOUNT_PWD
la password corrispondente. Configurare inoltre il percorso assoluto del motore OpenSSL PKCS11 inOPENSSL_PKCS11_ENGINE_PATH
e il percorso assoluto della libreria PKCS11 di NetHSM inNETHSM_PKCS11_LIBRARY_PATH
.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.Aggiornare la configurazione PKCS11 in
container/apache/p11nethsm.conf
con l’URL di NetHSMs e le credenziali valide dell’operatore.Generare il certificato e la chiave.
./container/apache/generate.sh
Costruire il contenitore.
docker build -f container/apache/Dockerfile . -t pkcs-httpd
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.