Nginx#

Możesz skonfigurować nginx do korzystania z NetHSM za pośrednictwem silnika OpenSSL, który następnie wykorzystuje moduł PKCS#11 NetHSM.

Plik certyfikatu musi znajdować się na dysku, ale klucz prywatny może być używany z NetHSM.

Pełny przykład jest dostępny na stronie poniżej.

Konfiguracja OpenSSL#

Skonfiguruj silnik OpenSSL, postępując zgodnie z instrukcją konfiguracji silnika OpenSSL.

Dostawcy nie są jeszcze obsługiwani przez Nginx.

Informacja

Używanie silnika libp11 OpenSSL w wersji 0.4.12 lub starszej i NetHSM z dużą ilością kluczy sprawi, że początkowe ładowanie Nginx będzie powolne (ponad minutę dla 1 tysiąca kluczy). Zaleca się użycie wersji 0.4.13 lub nowszej lub zbudowanie silnika ze źródła ` <https://github.com/OpenSC/libp11>` __.

Konfiguracja 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;
    }
}

Adres ssl_certificate musi wskazywać na plik certyfikatu na dysku.

ssl_certificate_key może być konfiguracją OpenSSL. Tutaj używamy silnika OpenSSL z modułem PKCS#11 i wybieramy klucz prywatny z etykietą/ID webserver i typem klucza private.

ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private";

Informacja

Musisz wygenerować certyfikat osobno, a następnie przesłać go do NetHSM. Jeśli certyfikat na dysku i klucz w NetHSM nie są zgodne, nginx nie uruchomi się.

libnethsm_pkcs11 Konfiguracja#

slots:
  - label: LocalHSM
    description: Local HSM (docker)
    url: "https://192.168.3.161:8443/api/v1"
    operator:
      username: "operator"
      password: "opPassphrase"

Aby zabezpieczyć hasło, można podać je za pomocą zmiennej środowiskowej (patrz Setup) lub podać je w konfiguracji nginx:

ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private;pin=opPassphrase";

Przykład#

Jeśli chcesz poeksperymentować z podanym przykładem ` <https://github.com/Nitrokey/nethsm-pkcs11/tree/main/container/nginx>` __ użyj git, aby sklonować repozytorium nethsm-pkcs11 i uruchom następujące polecenia:

Ostrzeżenie

Uruchomienie skryptu generującego usuwa klucz webserver i zastępuje go.

  1. Skonfiguruj NetHSM, rzeczywisty lub w kontenerze. Więcej informacji można znaleźć w przewodniku dla początkujących ` <getting-started.html>` __. Oprócz administratora potrzebne będzie konto operatora.

  2. Pobierz i zainstaluj najnowszą wersję sterownika nethsm-pkcs11 dostępną tutaj.

  3. Zainstaluj silnik OpenSSL PKCS11 zgodnie z opisem w podręczniku OpenSSL Manual. Nie trzeba tworzyć pliku konfiguracyjnego.

  4. Dostosuj zmienne HOST, ADMIN_ACCOUNT i ADMIN_ACCOUNT_PWD w container/nginx/generate.sh tak, aby HOST zawierał adres URL i port NetHSM, ADMIN_ACCOUNT zawierał nazwę użytkownika konta administratora, a ADMIN_ACCOUNT_PWD odpowiednie hasło. Dalej skonfiguruj bezwzględną ścieżkę silnika OpenSSL PKCS11 w OPENSSL_PKCS11_ENGINE_PATH i bezwzględną ścieżkę biblioteki NetHSM PKCS11 w NETHSM_PKCS11_LIBRARY_PATH.

  5. Utwórz plik konfiguracyjny NetHSM PKCS11 w jednej ze znanych lokalizacji ` <pkcs11-setup.html#configuration>` __, np. /etc/nitrokey/p11nethsm.conf. Musi on mieć skonfigurowane konto operatora i używać tej samej instancji NetHSM określonej wcześniej w skrypcie generowania.

  6. Zaktualizuj konfigurację PKCS11 w container/nginx/p11nethsm.conf za pomocą adresu URL NetHSMs i prawidłowych poświadczeń operatora.

  7. Wygeneruj certyfikat i klucz.

./container/nginx/generate.sh
  1. Zbuduj pojemnik.

docker build -f container/nginx/Dockerfile . -t pkcs-nginx
  1. Uruchom kontener.

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

Strona testowa NGINX będzie dostępna pod adresem https://localhost:9443/. Zwróć uwagę, że Twoja przeglądarka, miejmy nadzieję, ostrzeże Cię, że certyfikat witryny jest samopodpisany.