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"
За да защитите паролата, можете да я предоставите чрез променливата на средата ` <pkcs11-setup.html#passwords>`__) или да я предоставите в конфигурацията на nginx:
ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private;pin=opPassphrase";
Пример:¶
Ако искате да експериментирате с дадения пример, използвайте git, за да клонирате хранилището nethsm-pkcs11 и изпълнете следните команди:
Warning
Изпълнението на скрипта за генериране изтрива ключа webserver
и го заменя.
Конфигуриране на NetHSM - истински или контейнер. За повече информация вижте ръководството getting-started. Освен администраторски, ще ви е необходим и операторски акаунт.
Изтеглете и инсталирайте последната версия на nethsm-pkcs11 драйвера , достъпна от тук.
Инсталирайте енджина на OpenSSL PKCS11, както е описано в Ръководството за OpenSSL. Не е необходимо да създавате конфигурационен файл.
Настройте променливите
HOST
,ADMIN_ACCOUNT
иADMIN_ACCOUNT_PWD
вcontainer/nginx/generate.sh
така, чеHOST
да съдържа URL адреса и порта на вашия NetHSMs,ADMIN_ACCOUNT
да съдържа потребителското име на администраторския акаунт иADMIN_ACCOUNT_PWD
съответната парола. Освен това конфигурирайте абсолютния път на OpenSSL PKCS11 енджина вOPENSSL_PKCS11_ENGINE_PATH
и абсолютния път на NetHSM PKCS11 библиотеката вNETHSM_PKCS11_LIBRARY_PATH
.Създайте конфигурационен файл NetHSM PKCS11 в едно от известните места, например
/etc/nitrokey/p11nethsm.conf
. В него трябва да е конфигуриран операторски акаунт и да се използва същата инстанция на NetHSM, посочена преди това в скрипта за генериране.Актуализирайте конфигурацията PKCS11 в
container/nginx/p11nethsm.conf
с вашия NetHSMs URL адрес и валидни данни за оператора.Генерирайте сертификата и ключа.
./container/nginx/generate.sh
Изградете контейнера.
docker build -f container/nginx/Dockerfile . -t pkcs-nginx
Стартирайте контейнера.
docker run -p 9443:443 -p 9080:80 pkcs-nginx
Тестовата страница на NGINX ще бъде достъпна на адрес https://localhost:9443/. Обърнете внимание, че браузърът ви, надяваме се, ще ви предупреди, че сертификатът на уебсайтовете е самоподписан.