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>

The SSLCertificateFile must point to a certificate file on the disk. The SSLCertificateKeyFile should be a PKCS#11 URI pointing to the private key in the 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"

To secure the password you can provide it via an environment variable (see Passwords) or provide it in the httpd configuration:

SSLCertificateKeyFile "pkcs11:object=webserver;type=private;pin=opPassphrase";

Пример

Если вы хотите поэкспериментировать с приведенным примером, используйте git для клонирования репозитория nethsm-pkcs11 и выполните следующие команды:

Предупреждение

Запуск скрипта generate удаляет ключ webserver и заменяет его.

  1. Configure a NetHSM, either a real one or a container. See the getting-started guide for more information. Besides an administrator, you are going to need an operator account.

  2. Загрузите и установите последнюю версию драйвера nethsm-pkcs11 , доступную отсюда.

  3. Установите механизм OpenSSL PKCS11, как описано в руководстве OpenSSL Manual. Вам не нужно создавать файл конфигурации.

  4. Настройте переменные 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.

  5. Create a NetHSM PKCS11 configuration file in one of the known locations, e.g., /etc/nitrokey/p11nethsm.conf. It must have configured an operator account and use the same NetHSM instance specified in the generate script before.

  6. Обновите конфигурацию PKCS11 в разделе container/apache/p11nethsm.conf, добавив URL-адрес NetHSMs и действительные учетные данные оператора.

  7. Сгенерируйте сертификат и ключ.

    ./container/apache/generate.sh
    
  8. Постройте контейнер.

    docker build -f container/apache/Dockerfile . -t pkcs-httpd
    
  9. Запустите контейнер.

    docker run -p 9443:443 -p 9080:80 pkcs-httpd
    

Тестовая страница Apache будет доступна по адресу https://localhost:9443/. Обратите внимание, что ваш браузер, надеюсь, предупредит вас о том, что сертификат сайта является самоподписанным.