Nginx#

Puteți configura nginx 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, o puteți furniza prin intermediul unei variabile de mediu ` <pkcs11-setup.html#passwords>`__) sau o puteți furniza î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. 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.