TLS iestatīšana ar Apache2#

(Nitrokey HSM 2 - Linux)

Mājiens

To pašu koncepciju, kas aprakstīta šeit, var izmantot daudzās lietojumprogrammās, izmantojot openssl kā kriptogrāfijas backend. Koncepcija lielākoties ir šāda: aizstāt (slepeno) atslēgas failu ar PKCS#11 URL, kas atsaucas uz drošības marķiera (Nitrokey) atslēgu.

Sagatavošana#

  • pārliecinieties, ka apache2 versija ir vismaz 2.4.42, lai nodrošinātu mod_ssl atbalstu.

  • aktivizēt mod_ssl, izmantojot a2enmod ssl, ja tas jau nav izdarīts

  • papildus openssl ir nepieciešams un libengine-pkcs11-openssl skatīt PKCS#11 URL

Apache2 konfigurēšana, lai izmantotu drošības atslēgu#

Būtībā vienīgais, kas jādara, ir jāaizstāj SSLCertificateFile ar pareizo PKCS#11 URL un jāizdzēš visas citas atsauces uz atslēgām vai sertifikātiem. Piemēram, SSLCertificateKeyFile vairs nav nepieciešams.

Direktīvas piemērs varētu izskatīties šādi:

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

Atbilstošu PKCS#11 URL var iegūt, kā dokumentēts PKCS#11 URL ģenerēšana

Noteikti ievietojiet direktīvu konfigurācijā VirtualHost.

PIN nodrošināšana Apache2 palaišanas laikā#

Izmantojot iepriekš aprakstīto metodi, Apache2 pie katras palaišanas pieprasīs lietotāja PIN kodu, tādējādi būtībā atteikdamies no sērijveida palaišanas. Apache2 piedāvā vēl vienu direktīvu, lai palaišanas laikā sniegtu PIN kodu.

SSLPassPhraseDialog     "|/bin/echo 123456"

Apache2 sagaida izpildāmo failu pēc |, kas tiks izpildīts palaišanas laikā, un tā izvades rezultāti (sagaidāma pēdējā jaunā rindiņa) tiks izmantoti kā PIN. Acīmredzot, izmantojot šo pieeju, var īstenot jebkuras sarežģītas PIN iegūšanas metodes. Lai gan šeit ir izvēlēts triviāls piemērs, lai tikai echo palaišanas laikā iegūtu PIN kodu.

Turklāt SSLPassPhraseDialog ir globāla direktīva, tāpēc tā jāieliek Apache2 globālās konfigurācijas jomā.

Brīdinājums

Šis parādītais piemērs nav drošs PIN koda nodošanas mehānisms, jo tas tiks ierakstīts atklātā tekstā jūsu konfigurācijā.

Sīkāku informāciju par šo funkciju skatīt Apache2 mod_ssl dokumentācijā.

Pilnīgs Apache2 konfigurācijas piemērs#

Pilnīgs Apache2 (VirtualHost) konfigurācijas fragments varētu izskatīties šādi:

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