Konfiguracja TLS w Apache2#
Podpowiedź
Ta sama koncepcja jak opisana tutaj może być użyta w wielu aplikacjach używających openssl jako crypto-backend. Koncepcja sprowadza się głównie do: zastąpienia (tajnego) pliku klucza adresem URL PKCS#11 odwołującym się do klucza na tokenie bezpieczeństwa (Nitrokey)
Przygotowanie#
upewnij się, że wersja apache2 jest co najmniej 2.4.42 dla poprawnego
mod_ssl
wsparciaactivate
mod_ssl
usinga2enmod ssl
, if not already donedodatkowo
openssl
jest potrzebny ilibengine-pkcs11-openssl
patrz PKCS#11 URL.
Konfiguracja Apache2 do użycia klucza bezpieczeństwa#
W zasadzie jedyną rzeczą, którą należy zrobić jest zastąpienie SSLCertificateFile
właściwym adresem URL PKCS#11 i usunięcie wszelkich innych odniesień do kluczy lub certyfikatów. Na przykład, SSLCertificateKeyFile
nie jest już potrzebny.
Przykładowa dyrektywa może wyglądać następująco:
SSLCertificateFile "pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0123123;token=UserPIN%20%28SmartCard-HSM%29;id%01"
Właściwy adres URL PKCS#11 może być wyodrębniony jak udokumentowano w PKCS#11 URL Generation.
Upewnij się, że dyrektywa jest umieszczona wewnątrz konfiguracji VirtualHost.
Podaj PIN podczas uruchamiania Apache2#
Używając poprzednio opisanej metody, Apache2 będzie pytał przy każdym starcie o User-PIN, co w zasadzie uniemożliwi start wsadowy. Apache2 udostępnia inną dyrektywę, aby podać PIN podczas startu.
SSLPassPhraseDialog "|/bin/echo 123456"
Apache2 oczekuje pliku wykonywalnego po |
, który zostanie wykonany podczas startu i jego wyjście (oczekiwana jest końcowa nowa linia) zostanie użyte jako PIN. Oczywiście, dowolnie złożone metody pobierania PINu mogą być zaimplementowane przy użyciu tego podejścia. Chociaż tutaj został wybrany trywialny przykład, aby po prostu echo
uzyskać PIN podczas uruchamiania.
Dalej SSLPassPhraseDialog
jest dyrektywą globalną, a więc musi być umieszczona w globalnym zakresie konfiguracji w Apache2.
Ostrzeżenie
Ten pokazany przykład nie jest bezpiecznym mechanizmem przekazywania kodu PIN, ponieważ będzie on zapisany w postaci jawnego tekstu wewnątrz twojej konfiguracji
Zobacz dokumentację Apache2 mod_ssl documentation aby uzyskać więcej szczegółów na temat tej funkcji.
Kompletny przykład konfiguracji Apache2#
Kompletny wycinek konfiguracji Apache2 (VirtualHost
) może wyglądać tak:
<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>