TLS sąranka su „Apache2#

(Nitrokey HSM 2 - Linux)

Patarimas

Tą pačią čia aprašytą koncepciją galima naudoti daugelyje programų, kuriose openssl naudojamas kaip kriptografinis serveris. Koncepcija dažniausiai yra tokia: pakeisti (slaptą) rakto failą į PKCS#11 URL, kuriame pateikiama nuoroda į raktą, esantį saugumo ženkle (Nitrokey).

Paruošimas#

  • įsitikinkite, kad apache2 versija yra ne mažesnė kaip 2.4.42, kad būtų tinkamai mod_ssl palaikoma

  • suaktyvinti mod_ssl naudojant a2enmod ssl, jei tai dar nepadaryta

  • papildomai reikia openssl ir libengine-pkcs11-openssl žr. PKCS#11 URL

Sukonfigūruokite „Apache2“ naudoti saugumo raktą#

Iš esmės reikia tik pakeisti SSLCertificateFile tinkamu PKCS#11 URL ir ištrinti visas kitas nuorodas į raktus ar sertifikatus. Pavyzdžiui, SSLCertificateKeyFile nebereikia.

Direktyvos pavyzdys gali atrodyti taip:

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

Tinkamą PKCS#11 URL galima išgauti, kaip aprašyta PKCS#11 URL generavimas

Įsitikinkite, kad ši direktyva yra VirtualHost konfigūracijos viduje.

PIN kodo pateikimas „Apache2“ paleidimo metu#

Naudojant anksčiau aprašytą metodą, „Apache2“ kiekvieno paleidimo metu paprašys vartotojo PIN kodo, taigi iš esmės atsisakys paketinio paleidimo. Apache2 pateikia kitą direktyvą, leidžiančią pateikti PIN kodą paleidimo metu.

SSLPassPhraseDialog     "|/bin/echo 123456"

Po | laukiama vykdomosios programos, kuri bus paleista paleidimo metu, o jos’išvestis (tikimasi naujos eilutės pabaigos) bus naudojama kaip PIN. Akivaizdu, kad taikant šį metodą galima įgyvendinti bet kokius sudėtingus PIN gavimo metodus. Nors čia pasirinktas trivialus pavyzdys, kai paleidimo metu tiesiog echo išvedamas PIN kodas.

Be to, SSLPassPhraseDialog yra globalioji direktyva, todėl ji turi būti patalpinta „Apache2“ globaliosios konfigūracijos srityje.

Įspėjimas

Šis pavyzdys nėra saugus PIN kodo perdavimo mechanizmas, nes jis bus įrašytas atviru tekstu konfigūracijos viduje.

Daugiau informacijos apie šią funkciją rasite Apache2 mod_ssl dokumentacijoje.

Pilnas „Apache2“ konfigūracijos pavyzdys#

Pilna „Apache2“ (VirtualHost) konfigūracijos fragmentas gali atrodyti taip:

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