Nginx¶
Sie können nginx so konfigurieren, dass NetHSM über die OpenSSL-Engine verwendet wird, die dann das PKCS#11-Modul von NetHSM nutzt.
Die Zertifikatsdatei muss sich auf der Festplatte befinden, aber der private Schlüssel kann vom NetHSM aus verwendet werden.
Ein vollständiges Beispiel finden Sie unter ..
OpenSSL-Konfiguration¶
Richten Sie die OpenSSL-Engine ein, indem Sie der Anleitung OpenSSL Engine setup guide <openssl.html#engine> folgen __.
Provider werden von Nginx noch nicht unterstützt.
Bemerkung
Bei Verwendung der libp11 OpenSSL-Engine Version 0.4.12 oder älter und einem NetHSM mit vielen Schlüsseln wird das anfängliche Laden von Nginx langsam (mehr als eine Minute für 1.000 Schlüssel). Es wird empfohlen, Version 0.4.13 oder neuer zu verwenden oder die Engine von source zu bauen.
Nginx-Konfiguration¶
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;
}
}
Die ssl_certificate
muss auf eine Zertifikatsdatei auf der Festplatte verweisen.
Die ssl_certificate_key
kann eine OpenSSL-Konfiguration sein. Hier verwenden wir die OpenSSL-Engine mit dem PKCS#11-Modul und wählen den privaten Schlüssel mit dem Label/ID webserver
und dem Schlüsseltyp private
.
ssl_certificate_key „engine:pkcs11:pkcs11:object=webserver;type=private“;
Bemerkung
Sie müssen das Zertifikat separat generieren und es dann auf den NetHSM hochladen. Wenn das Zertifikat auf der Festplatte und der Schlüssel im NetHSM nicht übereinstimmen, kann nginx nicht gestartet werden.
libnethsm_pkcs11 Konfiguration¶
slots:
- label: LocalHSM
description: Local HSM (docker)
url: "https://192.168.3.161:8443/api/v1"
operator:
username: "operator"
password: "opPassphrase"
Um das Passwort zu sichern, können Sie es über eine Umgebungsvariable) oder in der nginx-Konfiguration angeben:
ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private;pin=opPassphrase";
Beispiel¶
Wenn Sie mit dem gegebenen Beispiel experimentieren wollen, verwenden Sie git, um das nethsm-pkcs11 Repository zu klonen und führen Sie die folgenden Befehle aus:
Warnung
Die Ausführung des Generierungsskripts löscht den Schlüssel webserver
und ersetzt ihn.
Konfigurieren Sie einen NetHSM, entweder einen echten oder einen Container. Weitere Informationen finden Sie in der Anleitung. Neben einem Administrator benötigen Sie auch ein Betreiberkonto.
Laden Sie die neueste Version des nethsm-pkcs11-Treibers herunter und installieren Sie sie von hier.
Installieren Sie die OpenSSL PKCS11-Engine wie im OpenSSL Manual <openssl.html> beschrieben. Sie müssen keine Konfigurationsdatei erstellen.
Passen Sie die Variablen
HOST
,ADMIN_ACCOUNT
undADMIN_ACCOUNT_PWD
incontainer/nginx/generate.sh
so an, dassHOST
die URL und den Port Ihres NetHSMs,ADMIN_ACCOUNT
den Benutzernamen eines Administratorkontos undADMIN_ACCOUNT_PWD
das entsprechende Passwort enthält. Konfigurieren Sie außerdem den absoluten Pfad der OpenSSL PKCS11 Engine inOPENSSL_PKCS11_ENGINE_PATH
und den absoluten Pfad der NetHSM PKCS11 Bibliothek inNETHSM_PKCS11_LIBRARY_PATH
.Erstellen Sie eine NetHSM PKCS11-Konfigurationsdatei an einem der bekannten Speicherorte, z. B.
/etc/nitrokey/p11nethsm.conf
. Sie muss ein Betreiberkonto konfiguriert haben und dieselbe NetHSM-Instanz verwenden, die zuvor im Generierungsskript angegeben wurde.Aktualisieren Sie die PKCS11-Konfiguration in
container/nginx/p11nethsm.conf
mit Ihrer NetHSM-URL und gültigen Betreiber-Anmeldedaten.Erzeugen Sie das Zertifikat und den Schlüssel.
./container/nginx/generate.sh
Bauen Sie den Container.
docker build -f container/nginx/Dockerfile . -t pkcs-nginx
Starten Sie den Container.
docker run -p 9443:443 -p 9080:80 pkcs-nginx
Die NGINX-Testseite finden Sie unter https://localhost:9443/. Beachten Sie, dass Ihr Browser Sie hoffentlich warnen wird, dass das Zertifikat der Website selbstsigniert ist.