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 angeben (siehe Setup) oder es 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.

  1. Konfigurieren Sie einen NetHSM, entweder einen echten oder einen Container. Weitere Informationen finden Sie in der Anleitung ` <getting-started.html>` __. Neben einem Administrator benötigen Sie auch ein Betreiberkonto.

  2. Laden Sie die neueste Version des nethsm-pkcs11-Treibers herunter und installieren Sie sie von hier.

  3. Installieren Sie die OpenSSL PKCS11-Engine wie im OpenSSL Manual <openssl.html> beschrieben. Sie müssen keine Konfigurationsdatei erstellen.

  4. Passen Sie die Variablen HOST, ADMIN_ACCOUNT und ADMIN_ACCOUNT_PWD in container/nginx/generate.sh so an, dass HOST die URL und den Port Ihres NetHSMs, ADMIN_ACCOUNT den Benutzernamen eines Administratorkontos und ADMIN_ACCOUNT_PWD das entsprechende Passwort enthält. Konfigurieren Sie außerdem den absoluten Pfad der OpenSSL PKCS11 Engine in OPENSSL_PKCS11_ENGINE_PATH und den absoluten Pfad der NetHSM PKCS11 Bibliothek in NETHSM_PKCS11_LIBRARY_PATH.

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

  6. Aktualisieren Sie die PKCS11-Konfiguration in container/nginx/p11nethsm.conf mit Ihrer NetHSM-URL und gültigen Betreiber-Anmeldedaten.

  7. Erzeugen Sie das Zertifikat und den Schlüssel.

./container/nginx/generate.sh
  1. Bauen Sie den Container.

docker build -f container/nginx/Dockerfile . -t pkcs-nginx
  1. 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.