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.