Apache#
Вы можете настроить Apache httpd на использование NetHSM через механизм OpenSSL, который затем использует PKCS#11 модуль NetHSM.
Файл сертификата должен находиться на диске, но закрытый ключ может быть использован из NetHSM.
Полный пример приведен на сайте ниже.
Конфигурация OpenSSL#
Настройте механизм OpenSSL, следуя руководству по настройке механизма OpenSSL Engine. (Провайдеры OpenSSL пока не поддерживаются Apache httpd).
Конфигурация Httpd#
Добавьте следующие строки в ваш httpd.conf
:
Listen 443
#...
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
#...
<VirtualHost *:443>
DocumentRoot /usr/local/apache2/htdocs
SSLEngine on
SSLCertificateFile /certs/certificate.pem
SSLCertificateKeyFile "pkcs11:object=webserver"
ErrorLog /tmp/a-error.log
CustomLog /tmp/a-access.log combined
</VirtualHost>
Адрес SSLCertificateFile
должен указывать на файл сертификата на диске.
В качестве SSLCertificateKeyFile
должен быть PKCS#11 URI, указывающий на закрытый ключ в NetHSM.
Примечание
Сертификат необходимо сгенерировать отдельно, а затем загрузить его в NetHSM. Если сертификат на диске и ключ в NetHSM не совпадают, то httpd не запустится.
libnethsm_pkcs11 Конфигурация#
slots:
- label: LocalHSM
description: Local HSM (docker)
url: "https://192.168.3.161:8443/api/v1"
operator:
username: "operator"
password: "opPassphrase"
Чтобы защитить пароль, вы можете задать его через переменную окружения (см. Пароли) или указать его в конфигурации httpd:
SSLCertificateKeyFile "pkcs11:object=webserver;type=private;pin=opPassphrase";
Пример#
Если вы хотите поэкспериментировать с приведенным примером, используйте git для клонирования репозитория nethsm-pkcs11 и выполните следующие команды:
Предупреждение
Запуск скрипта generate удаляет ключ webserver
и заменяет его.
Настройте NetHSM, либо реальный, либо контейнер. Дополнительную информацию см. в руководстве по началу работы ` <getting-started.html>` __. Помимо администратора, вам понадобится учетная запись оператора.
Загрузите и установите последнюю версию драйвера nethsm-pkcs11 , доступную отсюда.
Установите механизм OpenSSL PKCS11, как описано в руководстве OpenSSL Manual. Вам не нужно создавать файл конфигурации.
Настройте переменные
HOST
,ADMIN_ACCOUNT
иADMIN_ACCOUNT_PWD
вcontainer/apache/generate.sh
таким образом, чтобыHOST
содержал URL и порт вашего NetHSM,ADMIN_ACCOUNT
содержал имя пользователя учетной записи администратора иADMIN_ACCOUNT_PWD
соответствующий пароль. Далее укажите абсолютный путь к движку OpenSSL PKCS11 вOPENSSL_PKCS11_ENGINE_PATH
и абсолютный путь к библиотеке NetHSM PKCS11 вNETHSM_PKCS11_LIBRARY_PATH
.Создайте файл конфигурации NetHSM PKCS11 в одном из известных мест, например,
/etc/nitrokey/p11nethsm.conf
. В нем должна быть настроена учетная запись оператора и использоваться тот же экземпляр NetHSM, который был указан в сценарии генерации ранее.Обновите конфигурацию PKCS11 в разделе
container/apache/p11nethsm.conf
, добавив URL-адрес NetHSMs и действительные учетные данные оператора.Сгенерируйте сертификат и ключ.
./container/apache/generate.sh
Постройте контейнер.
docker build -f container/apache/Dockerfile . -t pkcs-httpd
Запустите контейнер.
docker run -p 9443:443 -p 9080:80 pkcs-httpd
Тестовая страница Apache будет доступна по адресу https://localhost:9443/. Обратите внимание, что ваш браузер, надеюсь, предупредит вас о том, что сертификат сайта является самоподписанным.