Apache#

Можете да конфигурирате Apache httpd да използва NetHSM чрез енджина OpenSSL, който след това използва модула PKCS#11 на NetHSM.

Файлът със сертификата трябва да е на диска, но частният ключ може да се използва от NetHSM.

Пълен пример е достъпен на адрес по-долу.

Конфигурация на OpenSSL#

Настройте OpenSSL енджина, като следвате ръководството за настройка на OpenSSL енджина ` <openssl.html#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.

Note

Трябва да генерирате сертификата отделно и след това да го качите в 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";

Пример:#

Ако искате да експериментирате с дадения пример ` <https://github.com/Nitrokey/nethsm-pkcs11/tree/main/container/apache>` __, използвайте git, за да клонирате хранилището nethsm-pkcs11 и изпълнете следните команди:

Warning

Изпълнението на скрипта за генериране изтрива ключа webserver и го заменя.

  1. Конфигуриране на NetHSM - истински или контейнер. За повече информация вижте ръководството getting-started. Освен администраторски, ще ви е необходим и операторски акаунт.

  2. Изтеглете и инсталирайте последната версия на nethsm-pkcs11 драйвера , достъпна от тук.

  3. Инсталирайте енджина на OpenSSL PKCS11, както е описано в Ръководството за OpenSSL ` <openssl.html>` __. Не е необходимо да създавате конфигурационен файл.

  4. Настройте променливите HOST, ADMIN_ACCOUNT и ADMIN_ACCOUNT_PWD в container/apache/generate.sh така, че HOST да съдържа URL адреса и порта на вашия NetHSMs, ADMIN_ACCOUNT да съдържа потребителското име на администраторския акаунт и ADMIN_ACCOUNT_PWD съответната парола. Освен това конфигурирайте абсолютния път на OpenSSL PKCS11 енджина в OPENSSL_PKCS11_ENGINE_PATH и абсолютния път на NetHSM PKCS11 библиотеката в NETHSM_PKCS11_LIBRARY_PATH.

  5. Създайте конфигурационен файл NetHSM PKCS11 в едно от известните места, например /etc/nitrokey/p11nethsm.conf. В него трябва да е конфигуриран операторски акаунт и да се използва същата инстанция на NetHSM, посочена преди това в скрипта за генериране.

  6. Актуализирайте конфигурацията PKCS11 в container/apache/p11nethsm.conf с вашия NetHSMs URL адрес и валидни данни за оператора.

  7. Генерирайте сертификата и ключа.

./container/apache/generate.sh
  1. Изградете контейнера.

docker build -f container/apache/Dockerfile . -t pkcs-httpd
  1. Стартирайте контейнера.

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

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