Nginx#
Puteți configura nginx <https://nginx.org/> __ 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, puteți să o furnizați printr-o variabilă de mediu (consultați Setup) sau să o furnizați î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.
Dacă NetHSM nu rulează pe localhost, va trebui să modificați URL-ul cererilor curl din
container/nginx/generate.sh
pentru a indica NetHSM-ul.Schimbați configurația libnethsm_pkcs11 pentru a se potrivi cu NetHSM-ul dvs. în
container/ejbca/p11nethsm.conf
.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
Containerul va fi disponibil la https://localhost:9443/ https://localhost:9443/.