TLS-inställning med Apache2

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

inactive

inactive

active

inactive

inactive

inactive

inactive

inactive

Råd

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

Förberedelse

  • Se till att apache2 är minst 2.4.42 för att få korrekt mod_ssl-stöd.

  • Aktivera mod_ssl med hjälp av a2enmod ssl, om det inte redan är gjort.

  • Dessutom behövs openssl och libengine-pkcs11-openssl se PKCS#11 URL

Konfigurera Apache2 för att använda en säkerhetsnyckel

Det enda du behöver göra är att ersätta SSLCertificateFile med den korrekta PKCS#11-URL:n och ta bort alla andra referenser till nycklar eller certifikat. SSLCertificateKeyFile behövs inte längre.

Ett exempel på ett direktiv kan se ut så här:

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

Den korrekta PKCS#11-URL:n kan extraheras enligt dokumentationen i PKCS#11 URL Generation

Se till att du placerar direktivet i en VirtualHost-konfiguration.

Ange PIN-kod vid start av Apache2

Med hjälp av den tidigare beskrivna metoden kommer Apache2 vid varje start att be om användar-PIN:et, vilket i princip innebär att batch-start avbryts. Apache2 tillhandahåller ett annat direktiv för att ange PIN-koden vid uppstart.

SSLPassPhraseDialog     "|/bin/echo 123456"

Apache2 förväntar sig en körbar fil efter |, som kommer att exekveras under uppstarten och dess utdata (avslutande nyrad förväntas) kommer att användas som PIN. Det är uppenbart att man med detta tillvägagångssätt kan genomföra godtyckligt komplexa metoder för att hämta PIN-koder. Här har dock ett trivialt exempel valts för att bara echo PIN-koden under uppstarten.

Vidare är SSLPassPhraseDialog ett globalt direktiv och måste därför placeras i det globala konfigurationsområdet i Apache2.

Varning

Det här exemplet är inte en säker mekanism för att överföra din PIN-kod, eftersom den kommer att skrivas i klartext i din konfiguration.

Se Apache2 mod_ssl documentation för mer information om denna funktion.

Exempel på fullständig Apache2-konfiguration

Ett komplett konfigurationsutdrag för Apache2 (VirtualHost) kan se ut så här:

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