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"
パスワードを保護するには、環境変数(`Setup<setup>`__を参照)を使用するか、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
キーが削除され、置き換わる。
NetHSMを設定する。本物のNetHSMでもコンテナでもよい。詳しくは`getting-started guide<getting-started>`__ を参照。
NetHSMがlocalhost上で動作していない場合は、``container/nginx/generate.sh``のcurlリクエストのURLをNetHSMを指すように変更する必要があります。
container/ejbca/p11nethsm.conf
にある libnethsm_pkcs11 の設定をお使いの NetHSM に合わせて変更してください。証明書と鍵を生成する。
./container/nginx/generate.sh
コンテナを作る。
docker build -f container/nginx/Dockerfile . -t pkcs-nginx
コンテナを実行する。
docker run -p 9443:443 -p 9080:80 pkcs-nginx
コンテナは`https://localhost:9443/<https://localhost:9443/>`__で入手できる。