Nginx#

Môžete nakonfigurovať nginx na používanie NetHSM prostredníctvom enginu OpenSSL, ktorý potom používa modul PKCS#11 NetHSM.

Súbor s certifikátom musí byť na disku, ale súkromný kľúč možno použiť z NetHSM.

Úplný príklad je k dispozícii na pod.

Konfigurácia OpenSSL#

Nastavte engine OpenSSL podľa príručky na nastavenie OpenSSL Engine.

Nginx zatiaľ poskytovateľov nepodporuje.

Poznámka

Použitie motora libp11 OpenSSL verzie 0.4.12 alebo staršej a NetHSM s veľkým množstvom kľúčov spôsobí, že počiatočné načítanie Nginxu bude pomalé (viac ako minúta pre tisíc kľúčov). Odporúča sa používať verziu 0.4.13 alebo novšiu alebo zostaviť engine zo zdrojového kódu ` <https://github.com/OpenSC/libp11>` __.

Konfigurácia 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;
    }
}

ssl_certificate musí ukazovať na súbor s certifikátom na disku.

ssl_certificate_key môže byť konfigurácia OpenSSL. Tu používame engine OpenSSL s modulom PKCS#11 a vyberáme súkromný kľúč s označením/ID webserver a typom kľúča private.

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

Poznámka

Certifikát musíte vygenerovať samostatne a potom ho nahrať do NetHSM. Ak sa certifikát na disku a kľúč v NetHSM nezhodujú, nginx sa nespustí.

Konfigurácia libnethsm_pkcs11#

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

Ak chcete zabezpečiť heslo, môžete ho zadať prostredníctvom premennej prostredia (pozri Setup) alebo ho zadať v konfigurácii nginx:

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

Príklad#

Ak chcete experimentovať s uvedeným príkladom ` <https://github.com/Nitrokey/nethsm-pkcs11/tree/main/container/nginx>` __, použite git na klonovanie repozitára nethsm-pkcs11 a spustite nasledujúce príkazy:

Varovanie

Spustením generovacieho skriptu sa odstráni kľúč webserver a nahradí sa.

  1. Nakonfigurujte NetHSM, buď skutočný, alebo kontajner. Viac informácií nájdete v príručke getting-started guide. Okrem účtu správcu budete potrebovať aj účet operátora.

  2. Stiahnite si a nainštalujte najnovšiu verziu nethsm-pkcs11 ovládača , ktorá je k dispozícii na adrese.

  3. Nainštalujte engine OpenSSL PKCS11 podľa opisu v príručke OpenSSL. Konfiguračný súbor nemusíte vytvárať.

  4. Upravte premenné HOST, ADMIN_ACCOUNT a ADMIN_ACCOUNT_PWD v container/nginx/generate.sh tak, aby HOST obsahovala adresu URL a port vášho NetHSM, ADMIN_ACCOUNT obsahovala používateľské meno administrátorských účtov a ADMIN_ACCOUNT_PWD príslušné heslo. Ďalej nakonfigurujte absolútnu cestu k OpenSSL PKCS11 engine v OPENSSL_PKCS11_ENGINE_PATH a absolútnu cestu k NetHSM PKCS11 knižnici v NETHSM_PKCS11_LIBRARY_PATH.

  5. Vytvorte konfiguračný súbor NetHSM PKCS11 v jednom zo známych umiestnení ` <pkcs11-setup.html#configuration>` __, napr. /etc/nitrokey/p11nethsm.conf. Musí mať nakonfigurovaný účet operátora a používať tú istú inštanciu NetHSM, ktorá bola predtým uvedená v generovacom skripte.

  6. Aktualizujte konfiguráciu PKCS11 na stránke container/nginx/p11nethsm.conf s vašou adresou URL NetHSM a platnými povereniami operátora.

  7. Vygenerujte certifikát a kľúč.

./container/nginx/generate.sh
  1. Zostavte kontajner.

docker build -f container/nginx/Dockerfile . -t pkcs-nginx
  1. Spustite kontajner.

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

Testovacia stránka NGINX bude k dispozícii na adrese https://localhost:9443/. Všimnite si, že váš prehliadač vás, dúfajme, upozorní, že certifikát webových stránok je podpísaný samopodpisom.