Nginx#

Galite sukonfigūruoti nginx naudoti NetHSM per OpenSSL variklį, kuris naudoja NetHSM PKCS#11 modulį.

Sertifikato failas turi būti diske, tačiau privatųjį raktą galima naudoti iš NetHSM.

Visą pavyzdį galima rasti žemiau.

„OpenSSL“ konfigūracija#

Nustatykite „OpenSSL“ variklį vadovaudamiesi OpenSSL variklio sąrankos vadovu.

„Nginx“ dar nepalaiko teikėjų.

Pastaba

Naudojant libp11 OpenSSL variklio versiją 0.4.12 arba senesnę ir NetHSM su daug raktų, pradinis „Nginx“ įkėlimas bus lėtas (daugiau nei minutė 1 tūkst. raktų). Rekomenduojama naudoti 0.4.13 ar naujesnę versiją arba sukurti variklį iš šaltinio.

„Nginx“ konfigūracija#

ssl_engine pkcs11;

server {
    listen       443 ssl;
    server_name  localhost;

    ssl_certificate      /certs/certificate.pem;

    ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private";

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  10s;
    ssl_session_tickets off;

    ssl_protocols TLSv1.3;
    ssl_prefer_server_ciphers  off;

    # HSTS (ngx_http_headers_module is required) (63072000 seconds)
    add_header Strict-Transport-Security "max-age=63072000" always;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

ssl_certificate turi nurodyti į sertifikato failą diske.

ssl_certificate_key gali būti OpenSSL konfigūracija. Čia naudojame OpenSSL variklį su PKCS#11 moduliu ir pasirenkame privatųjį raktą su webserver private etikete/ID ir rakto tipu.

ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private";

Pastaba

Sertifikatą reikia sukurti atskirai ir tada įkelti į NetHSM. Jei diske esantis sertifikatas ir NetHSM esantis raktas nesutampa, „nginx“ nepradės veikti.

libnethsm_pkcs11 konfigūracija#

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

Norėdami apsaugoti slaptažodį, galite jį pateikti per aplinkos kintamąjį (žr. sąranka) arba nurodyti jį „nginx“ konfigūracijoje:

ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private;pin=opPassphrase";

Pavyzdys#

Jei norite eksperimentuoti su pateiktu pavyzdžiu, naudokite git, kad klonuotumėte nethsm-pkcs11 saugyklą ir vykdykite šias komandas:

Įspėjimas

Paleidus generavimo scenarijų ištrinamas webserver raktas ir jis pakeičiamas nauju.

  1. Sukonfigūruokite tikrą arba konteinerį NetHSM. Daugiau informacijos rasite pradžios vadove. Be administratoriaus, jums reikės ir operatoriaus paskyros.

  2. Atsisiųskite ir įdiekite naujausią nethsm-pkcs11 tvarkyklės versiją iš čia.

  3. Įdiekite OpenSSL PKCS11 variklį, kaip aprašyta OpenSSL vadove. Konfigūracijos failo kurti nereikia.

  4. Pritaikykite kintamuosius HOST, ADMIN_ACCOUNT ir ADMIN_ACCOUNT_PWD container/nginx/generate.sh taip, kad HOST būtų jūsų NetHSM URL ir prievadas, ADMIN_ACCOUNT būtų administratoriaus paskyros vartotojo vardas ir ADMIN_ACCOUNT_PWD atitinkamas slaptažodis. Toliau konfigūruokite absoliutų OpenSSL PKCS11 variklio kelią OPENSSL_PKCS11_ENGINE_PATH ir absoliutų NetHSM PKCS11 bibliotekos kelią NETHSM_PKCS11_LIBRARY_PATH.

  5. Sukurkite NetHSM PKCS11 konfigūracijos failą vienoje iš žinomų vietų, pvz., /etc/nitrokey/p11nethsm.conf. Jame turi būti sukonfigūruota operatoriaus paskyra ir naudojamas tas pats NetHSM egzempliorius, kuris nurodytas prieš tai generavimo scenarijuje.

  6. Atnaujinkite PKCS11 konfigūraciją adresu container/nginx/p11nethsm.conf su savo NetHSMs URL ir galiojančiais operatoriaus įgaliojimais.

  7. Sukurkite sertifikatą ir raktą.

./container/nginx/generate.sh
  1. Pastatykite konteinerį.

docker build -f container/nginx/Dockerfile . -t pkcs-nginx
  1. Paleiskite konteinerį.

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

NGINX bandomąjį puslapį bus galima rasti adresu https://localhost:9443/. Atkreipkite dėmesį, kad jūsų naršyklė, tikėkimės, įspės jus, kad svetainių sertifikatas yra pasirašytas paties naudotojo.