Nginx#
Nastavite lahko nginx za uporabo NetHSM prek gonilnika OpenSSL, ki nato uporablja modul PKCS#11 NetHSM.
Datoteka potrdila mora biti na disku, zasebni ključ pa se lahko uporabi v NetHSM.
Celoten primer je na voljo spodaj.
Konfiguracija OpenSSL#
Motor OpenSSL nastavite po priročniku za nastavitev motorja OpenSSL.
Nginx še ne podpira ponudnikov.
Opomba
Pri uporabi gonilnika OpenSSL libp11 različice 0.4.12 ali starejše in NetHSM z veliko ključi bo začetno nalaganje Nginxa počasno (več kot minuto za tisoč ključev). Priporoča se uporaba različice 0.4.13 ali novejše ali sestava gonilnika iz izvorne kode ` <https://github.com/OpenSC/libp11>` __.
Konfiguracija 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
mora kazati na datoteko s potrdilom na disku.
ssl_certificate_key
je lahko konfiguracija OpenSSL. V tem primeru uporabimo pogon OpenSSL z modulom PKCS#11 in izberemo zasebni ključ z oznako/ID webserver
in vrsto ključa private
.
ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private";
Opomba
Potrdilo morate ustvariti ločeno in ga nato naložiti v NetHSM. Če se certifikat na disku in ključ v NetHSM ne ujemata, se nginx ne zažene.
libnethsm_pkcs11 Konfiguracija#
slots:
- label: LocalHSM
description: Local HSM (docker)
url: "https://192.168.3.161:8443/api/v1"
operator:
username: "operator"
password: "opPassphrase"
Geslo lahko zaščitite z okoljsko spremenljivko ` <pkcs11-setup.html#passwords>` __) ali pa ga navedete v konfiguraciji nginxa:
ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private;pin=opPassphrase";
Primer#
Če želite eksperimentirati z danim primerom ` <https://github.com/Nitrokey/nethsm-pkcs11/tree/main/container/nginx>` __, uporabite git za kloniranje skladišča nethsm-pkcs11 in zaženite naslednje ukaze:
Opozorilo
Z zagonom skripte za generiranje izbrišete ključ webserver
in ga nadomestite.
Konfigurirajte NetHSM, bodisi pravi bodisi vsebnik. Za več informacij glejte priročnik za začetek. Poleg skrbniškega računa boste potrebovali tudi račun operaterja.
Prenesite in namestite najnovejšo različico gonilnika nethsm-pkcs11 , ki je na voljo tukaj.
Namestite pogon OpenSSL PKCS11, kot je opisano v priročniku OpenSSL Manual. Konfiguracijske datoteke vam ni treba ustvariti.
Spremenljivke
HOST
,ADMIN_ACCOUNT
inADMIN_ACCOUNT_PWD
vcontainer/nginx/generate.sh
prilagodite tako, daHOST
vsebuje URL in vrata vašega NetHSM,ADMIN_ACCOUNT
vsebuje uporabniško ime skrbniških računov,ADMIN_ACCOUNT_PWD
pa ustrezno geslo. Nadalje konfigurirajte absolutno pot motorja OpenSSL PKCS11 vOPENSSL_PKCS11_ENGINE_PATH
in absolutno pot knjižnice NetHSM PKCS11 vNETHSM_PKCS11_LIBRARY_PATH
.Ustvarite konfiguracijsko datoteko NetHSM PKCS11 na eni od znanih lokacij, npr.
/etc/nitrokey/p11nethsm.conf
. V njej mora biti konfiguriran račun operaterja in uporabljen isti primerek NetHSM, ki je bil prej naveden v skripti za generiranje.Posodobite konfiguracijo PKCS11 v
container/nginx/p11nethsm.conf
s svojim naslovom URL NetHSMs in veljavnimi poverilnicami operaterja.Ustvarite potrdilo in ključ.
./container/nginx/generate.sh
Zgradite posodo.
docker build -f container/nginx/Dockerfile . -t pkcs-nginx
Zaženite vsebnik.
docker run -p 9443:443 -p 9080:80 pkcs-nginx
Testna stran NGINX bo na voljo na naslovu https://localhost:9443/. Upoštevajte, da vas bo brskalnik, upajmo, opozoril, da je certifikat spletnih strani samopodpisan.