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 не работи на localhost, ще трябва да промените URL адреса на curl заявките в container/nginx/generate.sh, за да сочи към вашия NetHSM.

  3. Променете конфигурацията на libnethsm_pkcs11, за да съответства на вашия NetHSM в container/ejbca/p11nethsm.conf.

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

./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

Контейнерът ще бъде достъпен на адрес https://localhost:9443/.