Konfiguracja TLS w Apache2

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

inactive

inactive

active

inactive

inactive

inactive

inactive

inactive

Podpowiedź

The very same concept as descriped here can be used for many applications using openssl as crypto-backend. The concept mostly boils down to: replace (secret) key-file with PKCS#11 URL referencing a key on a security token (Nitrokey).

Przygotowanie

  • upewnij się, że wersja apache2 jest co najmniej 2.4.42 dla poprawnego mod_ssl wsparcia

  • activate mod_ssl using a2enmod ssl, if not already done

  • dodatkowo openssl jest potrzebny i libengine-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>