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 ` <pkcs11-setup.html#passwords>`__) 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.
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.
Pobierz i zainstaluj najnowszą wersję sterownika nethsm-pkcs11 dostępną tutaj.
Zainstaluj silnik OpenSSL PKCS11 zgodnie z opisem w podręczniku OpenSSL Manual. Nie trzeba tworzyć pliku konfiguracyjnego.
Dostosuj zmienne
HOST
,ADMIN_ACCOUNT
iADMIN_ACCOUNT_PWD
wcontainer/nginx/generate.sh
tak, abyHOST
zawierał adres URL i port NetHSM,ADMIN_ACCOUNT
zawierał nazwę użytkownika konta administratora, aADMIN_ACCOUNT_PWD
odpowiednie hasło. Dalej skonfiguruj bezwzględną ścieżkę silnika OpenSSL PKCS11 wOPENSSL_PKCS11_ENGINE_PATH
i bezwzględną ścieżkę biblioteki NetHSM PKCS11 wNETHSM_PKCS11_LIBRARY_PATH
.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.Zaktualizuj konfigurację PKCS11 w
container/nginx/p11nethsm.conf
za pomocą adresu URL NetHSMs i prawidłowych poświadczeń operatora.Wygeneruj certyfikat i klucz.
./container/nginx/generate.sh
Zbuduj pojemnik.
docker build -f container/nginx/Dockerfile . -t pkcs-nginx
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.