Apache#

Możesz skonfigurować Apache httpd do korzystania z NetHSM za pośrednictwem silnika OpenSSL, który następnie wykorzystuje moduł PKCS#11 NetHSM.

Plik certyfikatu musi znajdować się na dysku, ale klucz prywatny może być używany z NetHSM.

Pełny przykład jest dostępny na stronie poniżej.

Konfiguracja OpenSSL#

Skonfiguruj silnik OpenSSL, postępując zgodnie z instrukcją konfiguracji silnika OpenSSL. (Dostawcy OpenSSL nie są jeszcze obsługiwani przez Apache httpd).

Konfiguracja httpd#

Dodaj następujące linie do swojego 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>

Adres SSLCertificateFile musi wskazywać na plik certyfikatu na dysku.

SSLCertificateKeyFile powinien być PKCS#11 URI wskazującym na klucz prywatny w NetHSM.

Informacja

Certyfikat należy wygenerować osobno, a następnie przesłać go do NetHSM. Jeśli certyfikat na dysku i klucz w NetHSM nie są zgodne, httpd nie uruchomi się.

libnethsm_pkcs11 Konfiguracja#

slots:
  - label: LocalHSM
    description: Local HSM (docker)
    url: "https://192.168.3.161:8443/api/v1"
    operator:
      username: "operator"
      password: "opPassphrase"

Aby zabezpieczyć hasło, można podać je za pomocą zmiennej środowiskowej (patrz Setup) lub podać je w konfiguracji httpd:

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

Przykład#

Jeśli chcesz poeksperymentować z podanym przykładem ` <https://github.com/Nitrokey/nethsm-pkcs11/tree/main/container/apache>` __ użyj git, aby sklonować repozytorium nethsm-pkcs11 i uruchom następujące polecenia:

Ostrzeżenie

Uruchomienie skryptu generującego usuwa klucz webserver i zastępuje go.

  1. Skonfiguruj NetHSM, rzeczywisty lub w kontenerze. Więcej informacji można znaleźć w przewodniku dla początkujących ` <getting-started.html>` __. Oprócz administratora potrzebne będzie konto operatora.

  2. Pobierz i zainstaluj najnowszą wersję sterownika nethsm-pkcs11 dostępną tutaj.

  3. Zainstaluj silnik OpenSSL PKCS11 zgodnie z opisem w podręczniku OpenSSL Manual. Nie trzeba tworzyć pliku konfiguracyjnego.

  4. Dostosuj zmienne HOST, ADMIN_ACCOUNT i ADMIN_ACCOUNT_PWD w container/apache/generate.sh tak, aby HOST zawierał adres URL i port NetHSM, ADMIN_ACCOUNT zawierał nazwę użytkownika konta administratora, a ADMIN_ACCOUNT_PWD odpowiednie hasło. Dalej skonfiguruj bezwzględną ścieżkę silnika OpenSSL PKCS11 w OPENSSL_PKCS11_ENGINE_PATH i bezwzględną ścieżkę biblioteki NetHSM PKCS11 w NETHSM_PKCS11_LIBRARY_PATH.

  5. Utwórz plik konfiguracyjny NetHSM PKCS11 w jednej ze znanych lokalizacji ` <pkcs11-setup.html#configuration>` __, np. /etc/nitrokey/p11nethsm.conf. Musi on mieć skonfigurowane konto operatora i używać tej samej instancji NetHSM określonej wcześniej w skrypcie generowania.

  6. Zaktualizuj konfigurację PKCS11 w container/apache/p11nethsm.conf za pomocą adresu URL NetHSMs i prawidłowych poświadczeń operatora.

  7. Wygeneruj certyfikat i klucz.

./container/apache/generate.sh
  1. Zbuduj pojemnik.

docker build -f container/apache/Dockerfile . -t pkcs-httpd
  1. Uruchom kontener.

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

Strona testowa Apache będzie dostępna pod adresem https://localhost:9443/. Należy pamiętać, że przeglądarka, miejmy nadzieję, będzie ostrzegać, że certyfikat strony jest samopodpisany.