Nastavenie TLS pomocou Apache2

Rada

Rovnaký koncept, ako je tu popísaný, sa dá použiť pre mnohé aplikácie, ktoré používajú openssl ako kryptografický backend. Koncept sa väčšinou obmedzuje na: nahradenie (tajného) súboru s kľúčom pomocou PKCS#11 URL odkazujúceho na kľúč na bezpečnostnom tokene (Nitrokey)

Príprava

  • zabezpečiť, aby verzia apache2 bola aspoň 2.4.42 pre správnu mod_ssl podporu

  • aktivujte mod_ssl pomocou a2enmod ssl, ak sa tak ešte nestalo

  • navyše openssl je potrebné a libengine-pkcs11-openssl pozri PKCS#11 URL

Konfigurácia Apache2 na používanie bezpečnostného kľúča

V podstate stačí nahradiť SSLCertificateFile správnou URL PKCS#11 a odstrániť všetky ostatné odkazy na kľúče alebo certifikáty. Napríklad SSLCertificateKeyFile už nie je potrebný.

Príklad smernice môže vyzerať takto:

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

Správnu adresu PKCS#11 URL možno získať podľa dokumentácie v PKCS#11 URL Generation

Nezabudnite umiestniť túto smernicu do konfigurácie VirtualHost.

Poskytnutie PIN kódu počas spúšťania Apache2

Pomocou predtým opísanej metódy sa Apache2 pri každom spustení spýta na User-PIN, čím v podstate odmietne dávkové spúšťanie. Apache2 poskytuje ďalšiu direktívu na zadanie PIN kódu počas spúšťania.

SSLPassPhraseDialog     "|/bin/echo 123456"

Apache2 očakáva za | spustiteľný súbor, ktorý sa vykoná počas spúšťania a jeho’výstup (očakáva sa končiaci nový riadok) sa použije ako PIN. Je zrejmé, že pomocou tohto prístupu možno implementovať ľubovoľne zložité metódy získavania PIN. Hoci tu bol zvolený triviálny príklad, aby sa počas spúšťania len echo získal PIN.

Ďalej SSLPassPhraseDialog je globálna smernica, preto musí byť umiestnená v globálnom konfiguračnom rozsahu Apache2.

Varovanie

Tento príklad nie je bezpečným mechanizmom na odovzdanie PIN kódu, pretože bude zapísaný v otvorenom texte vo vašej konfigurácii.

Viac informácií o tejto funkcii nájdete v Dokumentácii mod_ssl k Apache2.

Príklad kompletnej konfigurácie Apache2

Úplný fragment konfigurácie Apache2 (VirtualHost) môže vyzerať 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>