TLS beállítása Apache2-vel

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

inactive

inactive

active

inactive

inactive

inactive

inactive

inactive

Tipp

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

Előkészítés

  • győződjön meg róla, hogy az apache2 verziója legalább 2.4.42 a megfelelő mod_ssl támogatáshoz.

  • aktiválja a mod_ssl használatával a2enmod ssl, ha még nem tette meg.

  • Ezenkívül openssl és libengine-pkcs11-openssl szükséges, lásd PKCS#11 URL.

Az Apache2 konfigurálása biztonsági kulcs használatára

Alapvetően csak annyit kell tennie, hogy a SSLCertificateFile-t kicseréli a megfelelő PKCS#11 URL-re, és törli a kulcsokra vagy tanúsítványokra való minden más hivatkozást. Például a SSLCertificateKeyFile már nem szükséges.

Egy példa direktíva így nézhet ki:

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

A megfelelő PKCS#11 URL-t a PKCS#11 URL generálás dokumentumban leírtak szerint lehet kinyerni.

Ügyeljen arra, hogy a direktívát egy VirtualHost konfiguráción belül helyezze el.

PIN-kód megadása az Apache2 indítása során

A korábban leírt módszerrel az Apache2 minden indításkor kérni fogja a User-PIN-t, így alapvetően elutasítja a kötegelt indítást. Az Apache2 egy másik direktívát is biztosít a PIN megadására az indítás során.

SSLPassPhraseDialog     "|/bin/echo 123456"

Az Apache2 a | után egy futtatható állományt vár, amely az indítás során végrehajtásra kerül, és a kimenetét (a hátul lévő újsor várható) PIN-ként fogja használni. Nyilvánvalóan tetszőlegesen összetett PIN-keresési módszerek is megvalósíthatók ezzel a megközelítéssel. Bár itt egy triviális példát választottunk, hogy csak echo a PIN-t az indítás során.

Továbbá SSLPassPhraseDialog egy globális direktíva, ezért az Apache2-ben a globális konfigurációs tartományban kell elhelyezni.

Figyelem

Ez a példa nem biztonságos mechanizmus a PIN-kód átadására, mivel az egyszerű szöveges formában lesz leírva a konfiguráción belül.

Lásd az Apache2 mod_ssl dokumentációját a funkcióval kapcsolatos további részletekért.

Teljes Apache2 konfigurációs példa

Egy teljes Apache2 (VirtualHost<x>) konfigurációs részlet így nézhet ki:

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