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>

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.

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"

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";

Пример:

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

Warning

Изпълнението на скрипта за генериране изтрива ключа 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. Не е необходимо да създавате конфигурационен файл.

  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. 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 с вашия NetHSMs URL адрес и валидни данни за оператора.

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