Nginx

Saate seadistada nginx kasutama NetHSM-i OpenSSL-mootori kaudu, mis kasutab siis NetHSM-i PKCS#11-moodulit.

Sertifikaadifail peab olema kettal, kuid privaatvõtit saab kasutada NetHSMist.

Täielik näide on kättesaadav allpool.

OpenSSL konfiguratsioon

Seadistage OpenSSL mootor, järgides OpenSSL mootori seadistamise juhendit.

Nginx ei toeta veel teenusepakkujaid.

Märkus

Kasutades libp11 OpenSSL mootori versiooni 0.4.12 või vanemat ja NetHSM-i, millel on palju võtmeid, muutub Nginxi esialgne laadimine aeglaseks (üle minuti 1 tuhande võtme puhul). Soovitatav on kasutada versiooni 0.4.13 või uuemat või ehitada mootor lähtekoodist.

Nginxi konfiguratsioon

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 peab osutama kettal asuvale sertifikaadifailile.

ssl_certificate_key võib olla OpenSSL-i konfiguratsioon. Siinkohal kasutame OpenSSL mootorit koos PKCS#11 mooduliga ja valime privaatvõtme, mille märgistus/ID on webserver ja võtmetüüp private.

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

Märkus

Te peate sertifikaadi eraldi genereerima ja seejärel selle NetHSMi üles laadima. Kui kettal olev sertifikaat ja NetHSMis olev võti ei ühti, ei käivitu nginx.

libnethsm_pkcs11 Konfiguratsioon

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) or provide it in the nginx configuration:

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

Näide

Kui soovite eksperimenteerida antud näitega kasutage git’i, et kloonida nethsm-pkcs11 repositooriumi ja käivitage järgmised käsud:

Hoiatus

Genereerimise skripti käivitamine kustutab võtme webserver ja asendab selle.

  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. Lae alla ja paigalda uusim versioon nethsm-pkcs11 draiverist , mis on saadaval siit.

  3. Paigaldage OpenSSL PKCS11 mootor, nagu on kirjeldatud OpenSSL Manual. Konfigureerimisfaili ei ole vaja luua.

  4. Kohandage muutujaid HOST, ADMIN_ACCOUNT ja ADMIN_ACCOUNT_PWD container/nginx/generate.sh nii, et HOST sisaldab teie NetHSM-i URL-i ja porti, ADMIN_ACCOUNT sisaldab administraatori kasutajanime ja ADMIN_ACCOUNT_PWD vastavat parooli. Lisaks konfigureerige OpenSSL PKCS11 mootori absoluutne tee aadressil OPENSSL_PKCS11_ENGINE_PATH ja NetHSM PKCS11 raamatukogu absoluutne tee aadressil 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. Uuendage PKCS11 konfiguratsiooni aadressil container/nginx/p11nethsm.conf oma NetHSM-i URL-i ja kehtivate operaatorite volitustega.

  7. Sertifikaadi ja võtme genereerimine.

    ./container/nginx/generate.sh
    
  8. Ehitage konteiner.

    docker build -f container/nginx/Dockerfile . -t pkcs-nginx
    
  9. Käivitage konteiner.

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

The NGINX test page will be available at https://localhost:9443/. Note that your browser, will warn you that the websites certificate is self-signed.