TLS-asetus Apache2:n kanssa#

(Nitrokey HSM 2 - Windows)

Vihje

Samaa konseptia, joka on kuvattu tässä, voidaan käyttää monissa sovelluksissa, jotka käyttävät openssl:ää krypto-backendinä. Konsepti on lähinnä seuraava: korvaa (salainen) avaintiedosto PKCS#11-URL-osoitteella, joka viittaa avaimeen tietoturvatunnisteessa (Nitrokey).

Valmistelu#

  • varmista, että apache2-versio on vähintään 2.4.42, jotta mod_ssl-tuki toimii kunnolla.

  • aktivoi mod_ssl käyttämällä a2enmod ssl, jos sitä ei ole jo tehty.

  • lisäksi tarvitaan openssl ja libengine-pkcs11-openssl katso PKCS#11 URL.

Apache2:n määrittäminen käyttämään suojausavainta#

Periaatteessa ainoa tehtävä on korvata SSLCertificateFile oikealla PKCS#11-URL-osoitteella ja poistaa kaikki muut viittaukset avaimiin tai varmenteisiin. Esimerkiksi SSLCertificateKeyFile ei enää tarvita.

Esimerkkidirektiivi voi näyttää tältä:

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

Oikea PKCS#11-URL-osoite voidaan poimia asiakirjassa PKCS#11 URL Generation kuvatulla tavalla.

Muista sijoittaa direktiivi VirtualHost-konfiguraation sisään.

Anna PIN-koodi Apache2:n käynnistyksen aikana#

Käyttämällä aiemmin kuvattua menetelmää Apache2 kysyy User-PIN-tunnusta jokaisella käynnistyskerralla, jolloin se periaatteessa kieltäytyy eräajona tapahtuvasta käynnistyksestä. Apache2 tarjoaa toisen direktiivin PIN-koodin antamiseksi käynnistyksen aikana.

SSLPassPhraseDialog     "|/bin/echo 123456"

Apache2 odottaa | jälkeen suoritettavaa tiedostoa, joka suoritetaan käynnistyksen aikana ja sen’ulostuloa (odotetaan uutta riviä perässä) käytetään PIN-koodina. Ilmeisesti mielivaltaisia monimutkaisia PIN-koodin hakumenetelmiä voidaan toteuttaa tällä lähestymistavalla. Vaikka tässä on valittu triviaali esimerkki, jossa PIN-koodi saadaan vain echo käynnistyksen aikana.

Lisäksi SSLPassPhraseDialog on globaali direktiivi, joten se on sijoitettava Apache2:n globaaliin konfiguraatioalueeseen.

Varoitus

Tämä esimerkki ei ole turvallinen mekanismi PIN-koodin välittämiseen, koska se kirjoitetaan selvänä tekstinä konfiguraatiosi sisälle.

Katso Apache2 mod_ssl documentation lisätietoja tästä ominaisuudesta.

Täydellinen Apache2-konfiguraatioesimerkki#

Täydellinen Apache2:n (VirtualHost) konfiguraatiopätkä voi näyttää tältä:

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