Nginx#

`nginx<https://nginx.org/>`__ を設定して、NetHSM の PKCS#11 モジュールを使用する OpenSSL エンジン経由で NetHSM を使用することができます。

証明書ファイルはディスク上にある必要がありますが、秘密鍵はNetHSMから使用できます。

全例は` <#example>`__ の下にある。

OpenSSLの設定#

`OpenSSL Engine setup guide<openssl.html#engine>`__ に従ってOpenSSLエンジンをセットアップする。

プロバイダはNginxではまだサポートされていません。

注釈

libp11 OpenSSLエンジンのバージョン0.4.12またはそれ以前を使用し、多くのキーを持つNetHSMを使用すると、Nginxの初期ロードが遅くなります(1,000キーで1分以上)。バージョン0.4.13以降を使用するか、`ソース<https://github.com/OpenSC/libp11>`__ からエンジンをビルドすることをお勧めします。

Nginxの設定#

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 はディスク上の証明書ファイルを指していなければならない。

ssl_certificate_key``はOpenSSLのコンフィギュレーションである。ここでは PKCS#11 モジュールを搭載した OpenSSL エンジンを使用し、ラベル/ID が``webserver で、鍵のタイプが``private`` の秘密鍵を選択する。

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

注釈

証明書を別途生成し、NetHSM にアップロードする必要があります。ディスク上の証明書とNetHSM内のキーが一致しない場合、nginxは起動しません。

libnethsm_pkcs11 設定#

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

パスワードを保護するには、`環境変数<pkcs11-setup.html#passwords>`__) を使用するか、nginxのコンフィギュレーションで指定します:

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

#

`の例<https://github.com/Nitrokey/nethsm-pkcs11/tree/main/container/nginx>`__ を試してみたい場合は、git を使って`nethsm-pkcs11 リポジトリ<https://github.com/Nitrokey/nethsm-pkcs11>`__ をクローンし、以下のコマンドを実行してください:

警告

生成スクリプトを実行すると、webserver キーが削除され、置き換わる。

  1. NetHSMを設定する。本物のNetHSMでもコンテナでもよい。詳しくは`スタートアップガイド<getting-started.html>`__ を参照。管理者の他に、オペレーター・アカウントが必要です。

  2. nethsm-pkcs11 ドライバー` <https://github.com/Nitrokey/nethsm-pkcs11/releases>`__ から最新版をダウンロードしてインストールしてください。

  3. `OpenSSL Manual<openssl.html>`__ の説明に従って、OpenSSL PKCS11エンジンをインストールする。設定ファイルを作成する必要はありません。

  4. ` `` ` の変数 ` , ` `, ` ` を調整し、 ` ` に NetHSM の URL とポート、 ` に管理者アカウントのユーザー名、 ` ` に対応するパスワードを設定する。さらに、 ` ` に OpenSSL PKCS11 エンジンの絶対パスを、 ` ` に NetHSM PKCS11 ライブラリの絶対パスを設定する。container/nginx/generate.sh HOST ADMIN_ACCOUNT ADMIN_ACCOUNT_PWD HOST`ADMIN_ACCOUNT ADMIN_ACCOUNT_PWD OPENSSL_PKCS11_ENGINE_PATH NETHSM_PKCS11_LIBRARY_PATH

  5. NetHSM PKCS11 設定ファイルを` <pkcs11-setup.html#configuration>`__ のいずれかの既知の場所、例えば``/etc/nitrokey/p11nethsm.conf`` に作成します。オペレーター・アカウントを設定し、生成スクリプトで指定したのと同じNetHSMインスタンスを使用する必要があります。

  6. ``container/nginx/p11nethsm.conf``のPKCS11設定を、NetHSMsのURLと有効なオペレーター認証情報で更新します。

  7. 証明書と鍵を生成する。

./container/nginx/generate.sh
  1. コンテナを作る。

docker build -f container/nginx/Dockerfile . -t pkcs-nginx
  1. コンテナを実行する。

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

NGINXテストページは、`https://localhost:9443/<https://localhost:9443/>`__にあります。ブラウザは、うまくいけば、ウェブサイトの証明書が自己署名であることを警告することに注意してください。