アパッチ#
`Apache httpd<https://httpd.apache.org/>`__ を設定して、NetHSM の PKCS#11 モジュールを使用する OpenSSL エンジン経由で NetHSM を使用することができます。
証明書ファイルはディスク上にある必要がありますが、秘密鍵はNetHSMから使用できます。
全例は` <#example>` __ の下にある。
OpenSSLの設定#
`OpenSSL Engine setup guide<openssl.html#engine>`__ に従って、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>
SSLCertificateFile
はディスク上の証明書ファイルを指していなければならない。
SSLCertificateKeyFile
は、NetHSMの秘密鍵を指すPKCS#11`URI<https://www.rfc-editor.org/rfc/rfc7512>`__ でなければならない。
注釈
証明書は別途生成し、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"
パスワードを保護するには、環境変数(`Setup<setup>`__を参照)を使うか、httpdの設定で指定します:
SSLCertificateKeyFile "pkcs11:object=webserver;type=private;pin=opPassphrase";
例#
`の例<https://github.com/Nitrokey/nethsm-pkcs11/tree/main/container/apache>`__ を試してみたい場合は、git を使って`nethsm-pkcs11 リポジトリ<https://github.com/Nitrokey/nethsm-pkcs11>`__ をクローンし、以下のコマンドを実行してください:
警告
生成スクリプトを実行すると、webserver
キーが削除され、置き換わる。
NetHSMを設定する。本物のNetHSMでもコンテナでもよい。詳しくは`getting-started guide<getting-started>`__ を参照。
NetHSMがlocalhost上で動作していない場合は、``container/apache/generate.sh``のcurlリクエストのURLをNetHSMを指すように変更する必要があります。
container/apache/p11nethsm.conf
にある libnethsm_pkcs11 の設定をお使いの NetHSM に合わせて変更してください。証明書と鍵を生成する。
./container/apache/generate.sh
コンテナを作る。
docker build -f container/apache/Dockerfile . -t pkcs-httpd
コンテナを実行する。
docker run -p 9443:443 -p 9080:80 pkcs-httpd
コンテナは`https://localhost:9443/<https://localhost:9443/>`__で入手できる。