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

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

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>