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 и го заменя.

  1. Конфигуриране на NetHSM - истински или контейнер. За повече информация вижте ръководството getting-started. Освен администраторски, ще ви е необходим и операторски акаунт.

  2. Изтеглете и инсталирайте последната версия на nethsm-pkcs11 драйвера , достъпна от тук.

  3. Инсталирайте енджина на OpenSSL PKCS11, както е описано в Ръководството за OpenSSL ` <openssl.html>` __. Не е необходимо да създавате конфигурационен файл.

  4. Настройте променливите 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.

  5. Създайте конфигурационен файл NetHSM PKCS11 в едно от известните места, например /etc/nitrokey/p11nethsm.conf. В него трябва да е конфигуриран операторски акаунт и да се използва същата инстанция на NetHSM, посочена преди това в скрипта за генериране.

  6. Актуализирайте конфигурацията PKCS11 в container/nginx/p11nethsm.conf с вашия NetHSMs URL адрес и валидни данни за оператора.

  7. Генерирайте сертификата и ключа.

./container/nginx/generate.sh
  1. Изградете контейнера.

docker build -f container/nginx/Dockerfile . -t pkcs-nginx
  1. Стартирайте контейнера.

docker run -p 9443:443 -p 9080:80 pkcs-nginx

Тестовата страница на NGINX ще бъде достъпна на адрес https://localhost:9443/. Обърнете внимание, че браузърът ви, надяваме се, ще ви предупреди, че сертификатът на уебсайтовете е самоподписан.