Nginx#

Du kan konfigurere nginx til at bruge NetHSM via OpenSSL-motoren, som så bruger NetHSM’s PKCS#11-modul.

Certifikatfilen skal være på disken, men den private nøgle kan bruges fra NetHSM.

Et komplet eksempel er tilgængeligt nedenfor.

OpenSSL-konfiguration#

Opsæt OpenSSL-motoren ved at følge OpenSSL Engine setup guide.

Providers er endnu ikke understøttet af Nginx.

Bemærk

Brug af libp11 OpenSSL-motoren version 0.4.12 eller ældre og en NetHSM med mange nøgler vil gøre den indledende indlæsning af Nginx langsom (mere end et minut for 1.000 nøgler). Det anbefales at bruge version 0.4.13 eller nyere eller at bygge motoren fra source.

Nginx-konfiguration#

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 skal pege på en certifikatfil på disken.

ssl_certificate_key kan være en OpenSSL-konfiguration. Her bruger vi OpenSSL-motoren med PKCS#11-modulet og vælger den private nøgle med etiketten/ID webserver og nøgletypen private.

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

Bemærk

Du skal generere certifikatet separat og derefter uploade det til NetHSM. Hvis certifikatet på disken og nøglen i NetHSM ikke stemmer overens, vil nginx ikke starte.

libnethsm_pkcs11 Konfiguration#

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

For at sikre adgangskoden kan du angive den via en miljøvariabel (se Setup) eller angive den i nginx-konfigurationen:

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

Eksempel#

Hvis du vil eksperimentere med det givne eksempel, skal du bruge git til at klone nethsm-pkcs11 repository og køre følgende kommandoer:

Advarsel

Når du kører genereringsscriptet, slettes nøglen webserver, og den erstattes.

  1. Konfigurer en NetHSM, enten en rigtig eller en container. Se getting-started guide for flere oplysninger.

  2. Hvis din NetHSM ikke kører på localhost, skal du ændre URL’en for curl-anmodningerne i container/nginx/generate.sh, så den peger på din NetHSM.

  3. Skift libnethsm_pkcs11-konfigurationen, så den passer til din NetHSM i container/ejbca/p11nethsm.conf.

  4. Generer certifikatet og nøglen.

./container/nginx/generate.sh
  1. Byg beholderen.

docker build -f container/nginx/Dockerfile . -t pkcs-nginx
  1. Kør containeren.

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

Containeren vil være tilgængelig på https://localhost:9443/.