Nastavení protokolu TLS s Apache2

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

inactive

inactive

active

inactive

inactive

inactive

inactive

inactive

Rada

Stejný koncept, který je zde popsán, lze použít pro mnoho aplikací využívajících openssl jako kryptografický backend. Koncepce se většinou omezuje na: nahrazení (tajného) souboru s klíčem URL PKCS#11 odkazujícím na klíč na bezpečnostním tokenu (Nitrokey).

Příprava

  • zajistěte, aby verze apache2 byla alespoň 2.4.42 pro správnou mod_ssl podporu.

  • aktivovat mod_ssl pomocí a2enmod ssl, pokud již nebylo provedeno.

  • navíc je potřeba openssl a libengine-pkcs11-openssl viz PKCS#11 URL

Konfigurace aplikace Apache2 pro použití bezpečnostního klíče

V podstatě stačí nahradit SSLCertificateFile správnou adresou URL PKCS#11 a odstranit všechny ostatní odkazy na klíče nebo certifikáty. Například SSLCertificateKeyFile již není potřeba.

Příklad směrnice může vypadat takto:

SSLCertificateFile   "pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0123123;token=UserPIN%20%28SmartCard-HSM%29;id%01"

Správnou adresu URL PKCS#11 lze získat podle dokumentu PKCS#11 URL Generation

Nezapomeňte tuto směrnici umístit do konfigurace VirtualHost.

Poskytnutí kódu PIN během spouštění aplikace Apache2

Pomocí dříve popsané metody se Apache2 při každém spuštění zeptá na User-PIN, čímž v podstatě odmítne dávkové spouštění. Apache2 poskytuje další direktivu pro zadání PIN při spuštění.

SSLPassPhraseDialog     "|/bin/echo 123456"

Apache2 očekává za | spustitelný soubor, který bude spuštěn při startu a jeho’výstup (očekává se nový řádek na konci) bude použit jako PIN. Tímto přístupem lze samozřejmě implementovat libovolně složité metody získávání PIN. I když zde byl zvolen triviální příklad, kdy se při spuštění pouze echo zjistí PIN.

Dále SSLPassPhraseDialog je globální direktiva, proto musí být v Apache2 umístěna v globálním konfiguračním rozsahu.

Varování

Tento příklad není bezpečným mechanismem pro předání kódu PIN, protože bude zapsán v prostém textu uvnitř konfigurace.

Další podrobnosti o této funkci naleznete v Dokumentaci mod_ssl ke službě Apache2.

Kompletní příklad konfigurace Apache2

Kompletní fragment konfigurace Apache2 (VirtualHost) může vypadat takto:

<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>