Configurarea TLS cu Apache2#

Sugestie

Același concept descris aici poate fi folosit pentru multe aplicații care folosesc openssl ca crypto-backend. Conceptul se rezumă în principal la: înlocuirea fișierului cheie (secret) cu PKCS#11 URL care face referire la o cheie pe un token de securitate (Nitrokey).

Pregătire#

  • asigurați-vă că versiunea apache2 este cel puțin 2.4.42 pentru un suport adecvat mod_ssl`

  • activați mod_ssl` folosind a2enmod ssl, dacă nu a fost deja făcut

  • în plus openssl este necesar și libengine-pkcs11-openssl vezi PKCS#11 URL

Configurați Apache2 pentru a utiliza o cheie de securitate#

Practic, singurul lucru care trebuie făcut este să înlocuiți SSLCertificateFile cu URL-ul PKCS#11 corespunzător și să ștergeți orice alte referințe la chei sau certificate. De exemplu, SSLCertificateKeyFile nu mai este necesar.

Un exemplu de directivă ar putea arăta astfel:

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

URL-ul PKCS#11 adecvat poate fi extras așa cum este documentat în PKKCS#11 URL Generation

Asigurați-vă că plasați directiva în interiorul unei configurații VirtualHost.

Furnizați PIN-ul în timpul pornirii Apache2#

Folosind metoda descrisă anterior, Apache2 va cere la fiecare pornire codul PIN al utilizatorului, refuzând astfel practic pornirea pe loturi. Apache2 oferă o altă directivă pentru a furniza PIN-ul la pornire.

SSLPassPhraseDialog     "|/bin/echo 123456"

Apache2 așteaptă un executabil după |`, care va fi executat la pornire, iar ieșirea acestuia (se așteaptă o linie nouă la sfârșit) va fi utilizată ca PIN. Evident, metodele complexe arbitrare de recuperare a PIN-ului pot fi implementate folosind această abordare. Deși aici a fost ales un exemplu trivial pentru a obține doar echo` PIN-ul în timpul pornirii.

Mai mult, SSLPassPhraseDialog` este o directivă globală, deci trebuie să fie plasată în domeniul de configurare globală în Apache2.

Atenționare

Acest exemplu prezentat nu este un mecanism sigur pentru a transmite PIN-ul, deoarece acesta va fi scris în text simplu în interiorul configurației dvs.

Consultați Documentația Mod_ssl pentru Apache2 pentru mai multe detalii despre această caracteristică.

Exemplu complet de configurare Apache2#

Un fragment complet de configurare Apache2 (VirtualHost) ar putea arăta astfel:

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