Nginx#
Можете да конфигурирате nginx да използва NetHSM чрез енджина OpenSSL, който след това използва модула PKCS#11 на NetHSM.
Файлът със сертификата трябва да е на диска, но частният ключ може да се използва от NetHSM.
Пълен пример е достъпен на адрес по-долу.
Конфигурация на OpenSSL#
Настройте енджина на OpenSSL, като следвате ръководството за настройка на енджина на OpenSSL.
Доставчиците все още не се поддържат от Nginx.
Note
Използването на двигателя libp11 OpenSSL версия 0.4.12 или по-стара и NetHSM с много ключове ще направи първоначалното зареждане на Nginx бавно (повече от минута за 1 000 ключа). Препоръчително е да се използва версия 0.4.13 или по-нова или да се изгради енджинът от source.
Конфигурация на 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
трябва да сочи към файл със сертификат на диска.
ssl_certificate_key
може да бъде конфигурация на OpenSSL. Тук използваме енджина OpenSSL с модула PKCS#11 и избираме частния ключ с етикет/ID webserver
и тип ключ private
.
ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private";
Note
Трябва да генерирате сертификата отделно и след това да го качите в NetHSM. Ако сертификатът на диска и ключът в NetHSM не съвпадат, nginx няма да се стартира.
Конфигурация на libnethsm_pkcs11#
slots:
- label: LocalHSM
description: Local HSM (docker)
url: "https://192.168.3.161:8443/api/v1"
operator:
username: "operator"
password: "opPassphrase"
За да защитите паролата, можете да я предоставите чрез променлива на средата (вж. Настройка) или да я предоставите в конфигурацията на nginx:
ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private;pin=opPassphrase";
Пример:#
Ако искате да експериментирате с дадения пример ` <https://github.com/Nitrokey/nethsm-pkcs11/tree/main/container/nginx>` __, използвайте git, за да клонирате хранилището nethsm-pkcs11 и изпълнете следните команди:
Warning
Изпълнението на скрипта за генериране изтрива ключа webserver
и го заменя.
Конфигуриране на NetHSM - истински или контейнер. За повече информация вижте ръководството getting-started.
Ако вашият NetHSM не работи на localhost, ще трябва да промените URL адреса на curl заявките в
container/nginx/generate.sh
, за да сочи към вашия NetHSM.Променете конфигурацията на libnethsm_pkcs11, за да съответства на вашия NetHSM в
container/ejbca/p11nethsm.conf
.Генерирайте сертификата и ключа.
./container/nginx/generate.sh
Изградете контейнера.
docker build -f container/nginx/Dockerfile . -t pkcs-nginx
Стартирайте контейнера.
docker run -p 9443:443 -p 9080:80 pkcs-nginx
Контейнерът ще бъде достъпен на адрес https://localhost:9443/.