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.
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/apache/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/apache/p11nethsm.conf
mit Ihrer NetHSM-URL und gültigen Betreiber-Anmeldedaten.Erzeugen Sie das Zertifikat und den Schlüssel.
./container/apache/generate.sh
Bauen Sie den Container.
docker build -f container/apache/Dockerfile . -t pkcs-httpd
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.