Nginx¶
Môžete nakonfigurovať nginx na používanie NetHSM prostredníctvom enginu OpenSSL, ktorý potom používa modul PKCS#11 NetHSM.
Súbor s certifikátom musí byť na disku, ale súkromný kľúč možno použiť z NetHSM.
Úplný príklad je k dispozícii na pod.
Konfigurácia OpenSSL¶
Nastavte engine OpenSSL podľa príručky na nastavenie OpenSSL Engine.
Nginx zatiaľ poskytovateľov nepodporuje.
Poznámka
Použitie motora libp11 OpenSSL verzie 0.4.12 alebo staršej a NetHSM s veľkým množstvom kľúčov spôsobí, že počiatočné načítanie Nginxu bude pomalé (viac ako minúta pre tisíc kľúčov). Odporúča sa používať verziu 0.4.13 alebo novšiu alebo zostaviť engine zo zdrojového kódu ` <https://github.com/OpenSC/libp11>`__.
Konfigurácia 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
musí ukazovať na súbor s certifikátom na disku.
ssl_certificate_key
môže byť konfigurácia OpenSSL. Tu používame engine OpenSSL s modulom PKCS#11 a vyberáme súkromný kľúč s označením/ID webserver
a typom kľúča private
.
ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private";
Poznámka
Certifikát musíte vygenerovať samostatne a potom ho nahrať do NetHSM. Ak sa certifikát na disku a kľúč v NetHSM nezhodujú, nginx sa nespustí.
Konfigurácia libnethsm_pkcs11¶
slots:
- label: LocalHSM
description: Local HSM (docker)
url: "https://192.168.3.161:8443/api/v1"
operator:
username: "operator"
password: "opPassphrase"
Heslo môžete zabezpečiť prostredníctvom premennej prostredia ` <pkcs11-setup.html#passwords>`__) alebo ho môžete zadať v konfigurácii nginx:
ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private;pin=opPassphrase";
Príklad¶
Ak chcete experimentovať s uvedeným príkladom, použite git na klonovanie repozitára nethsm-pkcs11 a spustite nasledujúce príkazy:
Varovanie
Spustením generovacieho skriptu sa odstráni kľúč webserver
a nahradí sa.
Nakonfigurujte NetHSM, buď skutočný, alebo kontajner. Viac informácií nájdete v príručke getting-started guide. Okrem účtu správcu budete potrebovať aj účet operátora.
Stiahnite si a nainštalujte najnovšiu verziu nethsm-pkcs11 ovládača , ktorá je k dispozícii na adrese.
Nainštalujte engine OpenSSL PKCS11 podľa opisu v príručke OpenSSL. Konfiguračný súbor nemusíte vytvárať.
Upravte premenné
HOST
,ADMIN_ACCOUNT
aADMIN_ACCOUNT_PWD
vcontainer/nginx/generate.sh
tak, abyHOST
obsahovala adresu URL a port vášho NetHSM,ADMIN_ACCOUNT
obsahovala používateľské meno administrátorských účtov aADMIN_ACCOUNT_PWD
príslušné heslo. Ďalej nakonfigurujte absolútnu cestu k OpenSSL PKCS11 engine vOPENSSL_PKCS11_ENGINE_PATH
a absolútnu cestu k NetHSM PKCS11 knižnici vNETHSM_PKCS11_LIBRARY_PATH
.Vytvorte konfiguračný súbor NetHSM PKCS11 v jednom zo známych umiestnení ` <pkcs11-setup.html#configuration>`__, napr.
/etc/nitrokey/p11nethsm.conf
. Musí mať nakonfigurovaný účet operátora a používať tú istú inštanciu NetHSM, ktorá bola predtým uvedená v generovacom skripte.Aktualizujte konfiguráciu PKCS11 na stránke
container/nginx/p11nethsm.conf
s vašou adresou URL NetHSM a platnými povereniami operátora.Vygenerujte certifikát a kľúč.
./container/nginx/generate.sh
Zostavte kontajner.
docker build -f container/nginx/Dockerfile . -t pkcs-nginx
Spustite kontajner.
docker run -p 9443:443 -p 9080:80 pkcs-nginx
Testovacia stránka NGINX bude k dispozícii na adrese https://localhost:9443/. Všimnite si, že váš prehliadač vás, dúfajme, upozorní, že certifikát webových stránok je podpísaný samopodpisom.