Apache

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

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

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

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

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

За да защитите паролата, можете да я предоставите чрез променлива на средата (вж. Passwords) или да я предоставите в конфигурацията на 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. Не е необходимо да създавате конфигурационен файл.

  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/. Обърнете внимание, че вашият браузър, надяваме се, ще ви предупреди, че сертификатът на уебсайтовете е самоподписан.