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"
To secure the password you can provide it via an environment variable) or provide it in the nginx configuration:
ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private;pin=opPassphrase";
Пример:¶
Ако искате да експериментирате с дадения пример, използвайте git, за да клонирате хранилището nethsm-pkcs11 и изпълнете следните команди:
Warning
Изпълнението на скрипта за генериране изтрива ключа webserver и го заменя.
Configure a NetHSM, either a real one or a container. See the getting-started guide for more information. Besides an administrator, you are going to need an operator account.
Изтеглете и инсталирайте последната версия на 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.Create a NetHSM PKCS11 configuration file in one of the known locations, e.g.,
/etc/nitrokey/p11nethsm.conf. It must have configured an operator account and use the same NetHSM instance specified in the generate script before.Актуализирайте конфигурацията 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
The NGINX test page will be available at https://localhost:9443/. Note that your browser, will warn you that the websites certificate is self-signed.