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.
Konfigurer en NetHSM, enten en rigtig eller en container. Se getting-started guide for flere oplysninger.
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.Skift libnethsm_pkcs11-konfigurationen, så den passer til din NetHSM i
container/ejbca/p11nethsm.conf
.Generer certifikatet og nøglen.
./container/nginx/generate.sh
Byg beholderen.
docker build -f container/nginx/Dockerfile . -t pkcs-nginx
Kør containeren.
docker run -p 9443:443 -p 9080:80 pkcs-nginx
Containeren vil være tilgængelig på https://localhost:9443/.