Nastavitev TLS z Apache2

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

inactive

inactive

active

inactive

inactive

inactive

inactive

inactive

Nasvet

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

Priprava

  • zagotovite, da je različica apache2 vsaj 2.4.42 za pravilno mod_ssl podporo

  • aktivirajte mod_ssl z uporabo a2enmod ssl, če to še ni storjeno

  • dodatno sta potrebna openssl in libengine-pkcs11-openssl glej PKCS#11 URL

Konfiguracija Apache2 za uporabo varnostnega ključa

V bistvu je treba le zamenjati SSLCertificateFile z ustreznim naslovom URL PKCS#11 in izbrisati vse druge sklice na ključe ali potrdila. Npr. SSLCertificateKeyFile ni več potreben.

Primer direktive je lahko videti takole:

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

Ustrezen naslov URL PKCS#11 lahko pridobite, kot je dokumentirano v PKCS#11 URL Generation

Prepričajte se, da je direktiva v konfiguraciji VirtualHost.

Zagotovitev kode PIN med zagonom Apache2

Z uporabo prej opisane metode bo Apache2 ob vsakem zagonu zahteval uporabniški PIN, s čimer bo v bistvu zavrnil paketni zagon. Apache2 ponuja še eno direktivo za zagotavljanje kode PIN med zagonom.

SSLPassPhraseDialog     "|/bin/echo 123456"

Apache2 za | pričakuje izvršilni program, ki se bo izvedel med zagonom in njegov’izhod (pričakuje se končna nova vrstica) bo uporabljen kot PIN. S tem pristopom se lahko izvedejo poljubno zapletene metode pridobivanja kode PIN. Čeprav je bil tukaj izbran trivialen primer, ki med zagonom samo echo pridobi kodo PIN.

Nadalje SSLPassPhraseDialog je globalna direktiva, zato mora biti v Apache2 nameščena v globalno področje konfiguracije.

Opozorilo

Ta prikazani primer ni varen mehanizem za posredovanje kode PIN, saj bo zapisana v obliki navadnega besedila v konfiguraciji.

Za več podrobnosti o tej funkciji glejte Dokumentacijo mod_ssl za Apache2.

Celoten primer konfiguracije Apache2

Celoten fragment konfiguracije Apache2 (VirtualHost) je lahko videti takole:

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