TLS-Einrichtung mit Apache2¶
Compatible Nitrokeys |
|||||||
|---|---|---|---|---|---|---|---|
⨯ inactive |
⨯ inactive |
✓ active |
⨯ inactive |
⨯ inactive |
⨯ inactive |
⨯ inactive |
⨯ inactive |
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_sslzu unterstützenAktivieren Sie
mod_sslmita2enmod ssl, falls noch nicht geschehenzusätzlich wird
opensslbenötigt undlibengine-pkcs11-opensslsiehe 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>