Apache#

Sie können Apache httpd 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 die Anleitung OpenSSL Engine setup guide befolgen. (OpenSSL-Provider werden von Apache httpd noch nicht unterstützt.)

Httpd-Konfiguration#

Fügen Sie die folgenden Zeilen in Ihr httpd.conf ein:

Listen 443
#...
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
#...

<VirtualHost *:443>
    DocumentRoot /usr/local/apache2/htdocs
    SSLEngine on
    SSLCertificateFile /certs/certificate.pem
    SSLCertificateKeyFile "pkcs11:object=webserver"
    ErrorLog /tmp/a-error.log
    CustomLog /tmp/a-access.log combined
</VirtualHost>

Die SSLCertificateFile muss auf eine Zertifikatsdatei auf der Festplatte verweisen.

Der SSLCertificateKeyFile sollte ein PKCS#11 URI sein, der auf den privaten Schlüssel im NetHSM zeigt.

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 auf dem NetHSM nicht übereinstimmen, kann httpd 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 Passwörter) oder es in der httpd-Konfiguration angeben:

SSLCertificateKeyFile "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. 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/apache/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/apache/p11nethsm.conf mit Ihrer NetHSM-URL und gültigen Betreiber-Anmeldedaten.

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

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

docker build -f container/apache/Dockerfile . -t pkcs-httpd
  1. Starten Sie den Container.

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

Die Apache-Testseite finden Sie unter https://localhost:9443/. Beachten Sie, dass Ihr Browser Sie hoffentlich warnt, dass das Zertifikat der Website selbstsigniert ist.