Nginx#

Puteți configura nginx <https://nginx.org/> __ pentru a utiliza NetHSM prin intermediul motorului OpenSSL, care utilizează apoi modulul PKCS#11 al NetHSM.

Fișierul de certificat trebuie să se afle pe disc, dar cheia privată poate fi utilizată din NetHSM.

Un exemplu complet este disponibil mai jos.

Configurația OpenSSL#

Configurați motorul OpenSSL urmând ghidul de configurare a motorului OpenSSL ` <openssl.html#engine>` __.

Furnizorii nu sunt încă suportați de Nginx.

Notă

Folosirea motorului OpenSSL libp11 versiunea 0.4.12 sau mai veche și a unui NetHSM cu multe chei va face ca încărcarea inițială a Nginx să fie lentă (mai mult de un minut pentru o mie de chei). Se recomandă utilizarea versiunii 0.4.13 sau mai noi sau construirea motorului de pe sursa.

Configurația Nginx#

ssl_engine pkcs11;

server {
    listen       443 ssl;
    server_name  localhost;

    ssl_certificate      /certs/certificate.pem;

    ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private";

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  10s;
    ssl_session_tickets off;

    ssl_protocols TLSv1.3;
    ssl_prefer_server_ciphers  off;

    # HSTS (ngx_http_headers_module is required) (63072000 seconds)
    add_header Strict-Transport-Security "max-age=63072000" always;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Adresa ssl_certificate trebuie să indice către un fișier de certificat de pe disc.

ssl_certificate_key poate fi o configurație OpenSSL. Aici folosim motorul OpenSSL cu modulul PKCS#11 și selectăm cheia privată cu eticheta/ID webserver și tipul de cheie private.

ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private";

Notă

Trebuie să generați certificatul separat și apoi să îl încărcați în NetHSM. Dacă certificatul de pe disc și cheia din NetHSM nu se potrivesc, nginx nu va porni.

libnethsm_pkcs11 Configurație#

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

Pentru a securiza parola, puteți să o furnizați printr-o variabilă de mediu (consultați Setup) sau să o furnizați în configurația nginx:

ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private;pin=opPassphrase";

Exemplu#

Dacă doriți să experimentați cu exemplul dat utilizați git pentru a clona depozitul nethsm-pkcs11 și rulați următoarele comenzi:

Atenționare

Rularea scriptului de generare șterge cheia webserver și o înlocuiește.

  1. Configurați un NetHSM, fie unul real, fie un container. Pentru mai multe informații, consultați ghidul get-started. Pe lângă un administrator, veți avea nevoie de un cont de operator.

  2. Descărcați și instalați cea mai recentă versiune de nethsm-pkcs11 driver disponibil de aici.

  3. Instalați motorul OpenSSL PKCS11 așa cum este descris în OpenSSL Manual <openssl.html> __. Nu este necesar să creați un fișier de configurare.

  4. Ajustați variabilele HOST, ADMIN_ACCOUNT și ADMIN_ACCOUNT_PWD în container/nginx/generate.sh astfel încât HOST să conțină URL-ul și portul NetHSMs, ADMIN_ACCOUNT să conțină numele de utilizator al contului de administrator și ADMIN_ACCOUNT_PWD parola corespunzătoare. În continuare, configurați calea absolută a motorului OpenSSL PKCS11 în OPENSSL_PKCS11_ENGINE_PATH și calea absolută a bibliotecii PKCS11 NetHSM în NETHSM_PKCS11_LIBRARY_PATH.

  5. Creați un fișier de configurare NetHSM PKCS11 într-una din locațiile cunoscute ` <pkcs11-setup.html#configuration>` __, de exemplu, /etc/nitrokey/p11nethsm.conf. Acesta trebuie să aibă configurat un cont de operator și să utilizeze aceeași instanță NetHSM specificată în scriptul de generare anterior.

  6. Actualizați configurația PKCS11 din container/nginx/p11nethsm.conf cu URL-ul NetHSMs și acreditările valide ale operatorului.

  7. Generați certificatul și cheia.

./container/nginx/generate.sh
  1. Construiți containerul.

docker build -f container/nginx/Dockerfile . -t pkcs-nginx
  1. Rulați containerul.

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

Pagina de test NGINX va fi disponibilă la https://localhost:9443/. Rețineți că browserul dvs. vă va avertiza, sperăm, că certificatul site-urilor web este autofirmat.