Nastavitev TLS z Apache2#

(Nitrokey HSM 2 - Linux)

Nasvet

Isti koncept, kot je opisan tukaj, se lahko uporablja za številne aplikacije, ki uporabljajo openssl kot kriptografsko zaledje. Koncept se večinoma skrči na: zamenjajte (tajno) datoteko s ključem s PKCS#11 URL, ki se sklicuje na ključ na varnostnem žetonu (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>