TLS-instelling met Apache2#

Hint

Hetzelfde concept als hier beschreven kan gebruikt worden voor vele toepassingen die openssl als crypto-backend gebruiken. Het concept komt neer op: vervang een (geheim) sleutelbestand door een PKCS#11 URL die verwijst naar een sleutel op een security token (Nitrokey)

Voorbereiding#

  • zorg ervoor dat de apache2 versie tenminste 2.4.42 is voor een goede mod_ssl ondersteuning

  • activeer mod_ssl met a2enmod ssl, als dat nog niet gebeurd is

  • aanvullend is openssl nodig en libengine-pkcs11-openssl zie PKCS#11 URL

Apache2 configureren om een veiligheidssleutel te gebruiken#

In principe is het enige wat u hoeft te doen SSLCertificateFile te vervangen door de juiste PKCS#11 URL en alle andere verwijzingen naar sleutels of certificaten te verwijderen. Bv. SSLCertificateKeyFile is niet meer nodig.

Een voorbeeld richtlijn zou er zo uit kunnen zien:

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

De juiste PKCS#11 URL kan worden geëxtraheerd zoals gedocumenteerd in PKCS#11 URL Generation

Zorg ervoor dat de directive binnen een VirtualHost configuratie staat.

Geef PIN tijdens het opstarten van Apache2#

Met de eerder beschreven methode zal Apache2 bij elk opstarten om de User-PIN vragen, waardoor het opstarten van een batch in principe wordt geweigerd. Apache2 geeft een andere richtlijn om de PIN tijdens het opstarten te verstrekken.

SSLPassPhraseDialog     "|/bin/echo 123456"

Apache2 verwacht een uitvoerbaar bestand na |, dat tijdens het opstarten zal worden uitgevoerd en waarvan de uitvoer’s (er wordt een newline achteraan verwacht) als PIN zal worden gebruikt. Uiteraard kunnen met deze aanpak willekeurig complexe PIN-opvraagmethoden worden geïmplementeerd. Hoewel hier een triviaal voorbeeld is gekozen om alleen echo de PIN tijdens het opstarten.

Verder is SSLPassPhraseDialog een globale richtlijn, dus moet deze in Apache2 in het globale configuratiebereik worden geplaatst.

Waarschuwing

Dit getoonde voorbeeld is geen veilig mechanisme om uw PIN door te geven, aangezien het in platte tekst in uw configuratie zal worden geschreven

Zie de Apache2 mod_ssl documentatie voor meer details over deze functie.

Volledig Apache2 Config Voorbeeld#

Een volledige Apache2 (VirtualHost) config snippet zou er als volgt uit kunnen zien:

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