TLS-Einrichtung mit Apache2#
⨯ |
⨯ |
⨯ |
⨯ |
✓ |
⨯ |
⨯ |
⨯ |
Hinweis
Das gleiche Konzept, wie hier beschrieben, kann für viele Anwendungen verwendet werden, die openssl als Krypto-Backend verwenden. Das Konzept läuft im Wesentlichen auf Folgendes hinaus: Ersetzen Sie die (geheime) Schlüsseldatei durch eine PKCS#11-URL, die einen Schlüssel auf einem Sicherheits-Token (Nitrokey) referenziert.
Vorbereitung#
Stellen Sie sicher, dass die apache2-Version mindestens 2.4.42 ist, um
mod_ssl
zu unterstützenAktivieren Sie
mod_ssl
mita2enmod ssl
, falls noch nicht geschehenzusätzlich wird
openssl
benötigt undlibengine-pkcs11-openssl
siehe PKCS#11 URL
Konfigurieren des Apache2 zur Verwendung eines Sicherheitsschlüssels#
Im Grunde müssen Sie nur SSLCertificateFile
durch die richtige PKCS#11-URL ersetzen und alle anderen Verweise auf Schlüssel oder Zertifikate löschen. Z. B. wird SSLCertificateKeyFile
nicht mehr benötigt.
Eine Beispiel-Direktive könnte wie folgt aussehen:
SSLCertificateFile "pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0123123;token=UserPIN%20%28SmartCard-HSM%29;id%01"
Die richtige PKCS#11-URL kann wie in PKCS#11-URL-Generierung dokumentiert extrahiert werden
Achten Sie darauf, die Direktive innerhalb einer VirtualHost-Konfiguration zu platzieren.
PIN beim Start von Apache2 bereitstellen#
Mit der zuvor beschriebenen Methode fragt der Apache2 bei jedem Start nach der User-PIN und lehnt damit grundsätzlich einen Batch-Start ab. Der Apache2 bietet eine weitere Direktive, um die PIN beim Start bereitzustellen.
SSLPassPhraseDialog "|/bin/echo 123456"
Apache2 erwartet nach |
eine ausführbare Datei, die beim Start ausgeführt wird und deren Ausgabe (nachfolgender Zeilenumbruch wird erwartet) als PIN verwendet wird. Offensichtlich lassen sich mit diesem Ansatz beliebig komplexe Methoden zur PIN-Abfrage implementieren. Obwohl hier ein triviales Beispiel gewählt wurde, um die PIN während des Starts einfach echo
zu geben.
Weiterhin ist SSLPassPhraseDialog
eine globale Direktive, muss also im Apache2 in den globalen Konfigurationsbereich gelegt werden.
Warnung
Das gezeigte Beispiel ist kein sicherer Mechanismus zur Übergabe der PIN, da sie im Klartext in der Konfiguration geschrieben wird
Weitere Einzelheiten zu dieser Funktion finden Sie in der Apache2 mod_ssl-Dokumentation.
Vollständiges Apache2-Konfigurationsbeispiel#
Ein kompletter Apache2 (VirtualHost
) Konfigurationsausschnitt könnte wie folgt aussehen:
<IfModule mod_ssl.c>
SSLPassPhraseDialog "|/bin/echo 123456"
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile "pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0105076;token=UserPIN%20%28SmartCard-HSM%29"
#SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>