Nginx#

Nastavite lahko nginx za uporabo NetHSM prek gonilnika OpenSSL, ki nato uporablja modul PKCS#11 NetHSM.

Datoteka potrdila mora biti na disku, zasebni ključ pa se lahko uporabi v NetHSM.

Celoten primer je na voljo spodaj.

Konfiguracija OpenSSL#

Motor OpenSSL nastavite po priročniku za nastavitev motorja OpenSSL.

Nginx še ne podpira ponudnikov.

Opomba

Pri uporabi gonilnika OpenSSL libp11 različice 0.4.12 ali starejše in NetHSM z veliko ključi bo začetno nalaganje Nginxa počasno (več kot minuto za tisoč ključev). Priporoča se uporaba različice 0.4.13 ali novejše ali sestava gonilnika iz izvorne kode ` <https://github.com/OpenSC/libp11>` __.

Konfiguracija 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 mora kazati na datoteko s potrdilom na disku.

ssl_certificate_key je lahko konfiguracija OpenSSL. V tem primeru uporabimo pogon OpenSSL z modulom PKCS#11 in izberemo zasebni ključ z oznako/ID webserver in vrsto ključa private.

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

Opomba

Potrdilo morate ustvariti ločeno in ga nato naložiti v NetHSM. Če se certifikat na disku in ključ v NetHSM ne ujemata, se nginx ne zažene.

libnethsm_pkcs11 Konfiguracija#

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

Če želite geslo zavarovati, ga lahko navedete v spremenljivki okolja (glejte Nastavitev) ali ga navedete v konfiguraciji nginxa:

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

Primer#

Če želite eksperimentirati z danim primerom ` <https://github.com/Nitrokey/nethsm-pkcs11/tree/main/container/nginx>` __, uporabite git za kloniranje skladišča nethsm-pkcs11 in zaženite naslednje ukaze:

Opozorilo

Z zagonom skripte za generiranje izbrišete ključ webserver in ga nadomestite.

  1. Konfigurirajte NetHSM, bodisi pravi bodisi vsebnik. Za več informacij glejte priročnik za začetek.

  2. Če vaš NetHSM ne deluje na lokalnem gostitelju, boste morali spremeniti URL zahtevkov curl v container/nginx/generate.sh, da bo kazal na vaš NetHSM.

  3. Spremenite konfiguracijo libnethsm_pkcs11, da bo ustrezala vašemu NetHSM na container/ejbca/p11nethsm.conf.

  4. Ustvarite potrdilo in ključ.

./container/nginx/generate.sh
  1. Zgradite posodo.

docker build -f container/nginx/Dockerfile . -t pkcs-nginx
  1. Zaženite vsebnik.

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

Zabojnik bo na voljo na spletni strani https://localhost:9443/.