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>

The SSLCertificateFile must point to a certificate file on the disk. The SSLCertificateKeyFile should be a PKCS#11 URI pointing to the private key in the 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"

To secure the password you can provide it via an environment variable (see Passwords) or provide it in the httpd configuration:

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. Configure a NetHSM, either a real one or a container. See the getting-started guide for more information. Besides an administrator, you are going to need an operator account.

  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. Create a NetHSM PKCS11 configuration file in one of the known locations, e.g., /etc/nitrokey/p11nethsm.conf. It must have configured an operator account and use the same NetHSM instance specified in the generate script before.

  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
    
  8. Costruire il contenitore.

    docker build -f container/apache/Dockerfile . -t pkcs-httpd
    
  9. 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.