Nginx#
Puteți configura nginx pentru a utiliza NetHSM prin intermediul motorului OpenSSL, care utilizează apoi modulul PKCS#11 al NetHSM.
Fișierul de certificat trebuie să se afle pe disc, dar cheia privată poate fi utilizată din NetHSM.
Un exemplu complet este disponibil mai jos.
Configurația OpenSSL#
Configurați motorul OpenSSL urmând ghidul de configurare a motorului OpenSSL ` <openssl.html#engine>`__.
Furnizorii nu sunt încă suportați de Nginx.
Notă
Folosirea motorului OpenSSL libp11 versiunea 0.4.12 sau mai veche și a unui NetHSM cu multe chei va face ca încărcarea inițială a Nginx să fie lentă (mai mult de un minut pentru o mie de chei). Se recomandă utilizarea versiunii 0.4.13 sau mai noi sau construirea motorului de pe sursa.
Configurația 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;
}
}
Adresa ssl_certificate
trebuie să indice către un fișier de certificat de pe disc.
ssl_certificate_key
poate fi o configurație OpenSSL. Aici folosim motorul OpenSSL cu modulul PKCS#11 și selectăm cheia privată cu eticheta/ID webserver
și tipul de cheie private
.
ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private";
Notă
Trebuie să generați certificatul separat și apoi să îl încărcați în NetHSM. Dacă certificatul de pe disc și cheia din NetHSM nu se potrivesc, nginx nu va porni.
libnethsm_pkcs11 Configurație#
slots:
- label: LocalHSM
description: Local HSM (docker)
url: "https://192.168.3.161:8443/api/v1"
operator:
username: "operator"
password: "opPassphrase"
Pentru a securiza parola, o puteți furniza prin intermediul unei variabile de mediu ` <pkcs11-setup.html#passwords>`__) sau o puteți furniza în configurația nginx:
ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private;pin=opPassphrase";
Exemplu#
Dacă doriți să experimentați cu exemplul dat utilizați git pentru a clona depozitul nethsm-pkcs11 și rulați următoarele comenzi:
Atenționare
Rularea scriptului de generare șterge cheia webserver
și o înlocuiește.
Configurați un NetHSM, fie unul real, fie un container. Pentru mai multe informații, consultați ghidul get-started. Pe lângă un administrator, veți avea nevoie de un cont de operator.
Descărcați și instalați cea mai recentă versiune de nethsm-pkcs11 driver disponibil de aici.
Instalați motorul OpenSSL PKCS11 așa cum este descris în OpenSSL Manual. Nu este necesar să creați un fișier de configurare.
Ajustați variabilele
HOST
,ADMIN_ACCOUNT
șiADMIN_ACCOUNT_PWD
încontainer/nginx/generate.sh
astfel încâtHOST
să conțină URL-ul și portul NetHSMs,ADMIN_ACCOUNT
să conțină numele de utilizator al contului de administrator șiADMIN_ACCOUNT_PWD
parola corespunzătoare. În continuare, configurați calea absolută a motorului OpenSSL PKCS11 înOPENSSL_PKCS11_ENGINE_PATH
și calea absolută a bibliotecii PKCS11 NetHSM înNETHSM_PKCS11_LIBRARY_PATH
.Creați un fișier de configurare NetHSM PKCS11 într-una din locațiile cunoscute ` <pkcs11-setup.html#configuration>`__, de exemplu,
/etc/nitrokey/p11nethsm.conf
. Acesta trebuie să aibă configurat un cont de operator și să utilizeze aceeași instanță NetHSM specificată în scriptul de generare anterior.Actualizați configurația PKCS11 din
container/nginx/p11nethsm.conf
cu URL-ul NetHSMs și acreditările valide ale operatorului.Generați certificatul și cheia.
./container/nginx/generate.sh
Construiți containerul.
docker build -f container/nginx/Dockerfile . -t pkcs-nginx
Rulați containerul.
docker run -p 9443:443 -p 9080:80 pkcs-nginx
Pagina de test NGINX va fi disponibilă la https://localhost:9443/. Rețineți că browserul dvs. vă va avertiza, sperăm, că certificatul site-urilor web este autofirmat.