Nginx¶
Du kan konfigurera nginx att använda NetHSM via OpenSSL-motorn som sedan använder NetHSM:s PKCS#11-modul.
Certifikatfilen måste finnas på hårddisken men den privata nyckeln kan användas från NetHSM.
Ett fullständigt exempel finns tillgängligt nedan.
Konfiguration av OpenSSL¶
Installera OpenSSL-motorn genom att följa Installationsguide för OpenSSL-motor.
Providers stöds ännu inte av Nginx.
Observera
Om du använder libp11 OpenSSL-motor version 0.4.12 eller äldre och en NetHSM med många nycklar blir den första laddningen av Nginx långsam (mer än en minut för 1 000 nycklar). Vi rekommenderar att du använder version 0.4.13 eller nyare eller att du bygger motorn från källan ` <https://github.com/OpenSC/libp11>`__.
Konfiguration av 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
måste peka på en certifikatfil på disken.
ssl_certificate_key
kan vara en OpenSSL-konfiguration. Här använder vi OpenSSL-motorn med PKCS#11-modulen och väljer den privata nyckeln med etiketten/ID webserver
och nyckeltypen private
.
ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private";
Observera
Du måste generera certifikatet separat och sedan ladda upp det till NetHSM. Om certifikatet på disken och nyckeln i NetHSM inte matchar varandra kommer nginx inte att starta.
libnethsm_pkcs11 Konfiguration¶
slots:
- label: LocalHSM
description: Local HSM (docker)
url: "https://192.168.3.161:8443/api/v1"
operator:
username: "operator"
password: "opPassphrase"
För att säkra lösenordet kan du ange det via en miljövariabel) eller ange det i nginx-konfigurationen:
ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private;pin=opPassphrase";
Exempel¶
Om du vill experimentera med exemplet ` <https://github.com/Nitrokey/nethsm-pkcs11/tree/main/container/nginx>`__ använder du git för att klona nethsm-pkcs11 repository och kör följande kommandon:
Varning
När genereringsskriptet körs raderas nyckeln webserver
och ersätts med en ny.
Konfigurera en NetHSM, antingen en riktig eller en container. Mer information finns i Getting-started guide. Förutom en administratör kommer du att behöva ett operatörskonto.
Ladda ner och installera den senaste versionen av drivrutinen nethsm-pkcs11 som finns tillgänglig här.
Installera OpenSSL PKCS11-motorn enligt beskrivningen i OpenSSL Manual. Du behöver inte skapa någon konfigurationsfil.
Justera variablerna
HOST
,ADMIN_ACCOUNT
ochADMIN_ACCOUNT_PWD
icontainer/nginx/generate.sh
så attHOST
innehåller din NetHSMs URL och port,ADMIN_ACCOUNT
innehåller ett administratörskontos användarnamn ochADMIN_ACCOUNT_PWD
motsvarande lösenord. Konfigurera vidare den absoluta sökvägen för OpenSSL PKCS11-motorn iOPENSSL_PKCS11_ENGINE_PATH
och den absoluta sökvägen för NetHSM PKCS11-biblioteket iNETHSM_PKCS11_LIBRARY_PATH
.Skapa en NetHSM PKCS11-konfigurationsfil på en av de kända platserna, t.ex.
/etc/nitrokey/p11nethsm.conf
. Den måste ha konfigurerat ett operatörskonto och använda samma NetHSM-instans som angavs i genereringsskriptet tidigare.Uppdatera PKCS11-konfigurationen i
container/nginx/p11nethsm.conf
med din NetHSMs-URL och giltiga operatörsautentiseringsuppgifter.Generera certifikat och nyckel.
./container/nginx/generate.sh
Bygg upp behållaren.
docker build -f container/nginx/Dockerfile . -t pkcs-nginx
Kör containern.
docker run -p 9443:443 -p 9080:80 pkcs-nginx
NGINX testsida kommer att finnas tillgänglig på https://localhost:9443/. Observera att din webbläsare, förhoppningsvis, kommer att varna dig för att webbplatsens certifikat är självsignerat.