Настройка на TLS с Apache2¶
⨯ |
⨯ |
⨯ |
⨯ |
✓ |
⨯ |
⨯ |
⨯ |
Hint
Същата концепция, както е описана тук, може да се използва за много приложения, използващи openssl като крипто-бекенд. Концепцията се свежда най-вече до следното: заместване на (секретен) ключов файл с PKCS#11 URL, който се позовава на ключ на защитен ключ (Nitrokey).
Подготовка¶
Уверете се, че версията на apache2 е поне 2.4.42 за правилна
mod_ssl
поддръжкаактивиране на
mod_ssl
с помощта наa2enmod ssl
, ако вече не е направеноОсвен това е необходимо
openssl
иlibengine-pkcs11-openssl
виж PKCS#11 URL
Конфигуриране на Apache2 за използване на ключ за сигурност¶
По принцип единственото, което трябва да направите, е да замените SSLCertificateFile
с правилния PKCS#11 URL адрес и да изтриете всички други препратки към ключове или сертификати. Например, SSLCertificateKeyFile
вече не е необходимо.
Една примерна директива може да изглежда по следния начин:
SSLCertificateFile "pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0123123;token=UserPIN%20%28SmartCard-HSM%29;id%01"
Правилният PKCS#11 URL адрес може да бъде извлечен, както е документирано в PKCS#11 URL Generation
Не забравяйте да поставите директивата в конфигурация VirtualHost.
Предоставяне на ПИН код по време на стартирането на Apache2¶
При използване на описания по-рано метод Apache2 ще пита при всяко стартиране за User-PIN, като по този начин по същество се отказва от пакетното стартиране. Apache2 предоставя друга директива за предоставяне на ПИН по време на стартиране.
SSLPassPhraseDialog "|/bin/echo 123456"
Apache2 очаква изпълним файл след |
, който ще бъде изпълнен по време на стартиране и изходът му (очаква се завършващ нов ред) ще бъде използван като PIN. Очевидно е, че чрез този подход могат да се прилагат произволни сложни методи за извличане на ПИН. Въпреки че тук е избран тривиален пример, който просто echo
ПИН по време на стартиране.
Освен това SSLPassPhraseDialog
е глобална директива, затова трябва да бъде поставена в глобалния обхват на конфигурацията в Apache2.
Warning
Показаният пример не е сигурен механизъм за предаване на вашия ПИН код, тъй като той ще бъде записан в обикновен текст в конфигурацията ви.
Вижте Документацията на Apache2 mod_ssl за повече подробности относно тази функция.
Пълен пример за конфигурация на Apache2¶
Пълен фрагмент от конфигурацията на Apache2 (VirtualHost
) може да изглежда така:
<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>