Tomcat を設定して、サーバー上にリモートで保存された秘密鍵で SSL 暗号化を使用する方法があるかどうかを知りたいのですserver.xml
が、サーバーの設定は次のようになると思います。
Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
proxyPort=""
keystoreFile="{./script-return}/keystore.jks"
keystorePass="12345"
keystoreType="jks"
truststorePass="12345"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
ただし、このkeystoreFile
ディレクティブは、リモート サーバーから秘密キーを抽出するスクリプトを指すものです。
Tomcat の設定で、キーを抽出するためのシェル スクリプトを指定する方法はありますか?
私は何かを見つけたトラストマネージャーしかし、パスはファイル システム パスを指す必要があることがわかりますが、これは代替手段ではありません。
答え1
「鍵の抽出」はHSMを使用する意味を全く失わせます。秘密鍵はTomcatのメモリに保存されたままになるので(つまりHeartbleedなどを使って盗むことが可能になる)、それを見た人は誰server.xml
でも盗むことができるのです。まったく同じコマンドを実行するだけでTomcat と同じです。
あなたのアイデアはTomcatが作れる場合にのみ意味を成す署名リクエストを送信するHSM へ。これにより、レイテンシが若干増加します (すべての TLS 接続が HSM に到達する必要があるため) が、実際にセキュリティをいくらか強化できる唯一の方法です。
(実際の HSM である必要はありません。同じシステムで実行されている SoftHSM2 でもかまいません。その場合、一方のユーザー アカウントにキーをしっかりと保持し、もう一方のユーザー アカウントに Tomcat をしっかりと保持する限り、より安全になります。)
同じシステムでPKCS#11モジュールを使用する
このセクションを早送りすることもできますが、Tomcat で PKCS#11 を使用する基本的な手順は次のとおりです。
- 次のファイルを作成します:
/etc/java-<name>.cfg
名前 =<hsm_name>
(ライブラリパスはディストリビューションに応じて調整してください。この設定ファイルの完全なドキュメントはJava PKCS#11 ガイド。
ライブラリ = /usr/lib/p11-kit-proxy.so - ファイルに新しい行を追加します
java.security
:セキュリティプロバイダー。数=sun.security.pkcs11.SunPKCS11 /etc/java-<名前>.cfg
- keytool を実行し、HSM の内容が表示されることを確認します。
キーツール --list --storetype PKCS11
最後に、Tomcat が PKCS#11 を使用するように設定します。
<Connector ... keystore="NONE" keystoreType="PKCS11" keystoreProvider="SunPKCS11-hsm_name" keystorePass="[HSM PIN here]" />
リモートサーバーからのPKCS#11モジュールの使用
のp11キットパッケージには、これを実現できる 2 つのコンポーネントが付属しています。
PKCS
p11-kit-proxy.so
#11 モジュールはマルチプレクサとして機能し、構成に応じてさまざまな他のモジュールをロードするように構成できます。特に、パイプを介してプロセス外モジュールと通信できます。この
p11-kit remote
ツールは、p11-kit のプロセス外モジュール サポートのもう一方のパイプ エンドとして機能します。SSH またはその他のトンネル経由で使用できます。
まず HSM 側から:
- p11-kit をインストールし、それを使用するユーザー アカウントを選択または作成します。
- そのユーザー アカウントにファイルを作成し、p11-kit に HSM PKCS#11 モジュールについて伝えます。ファイルの内容は 1 行で構成されます。
~/.config/pkcs11/modules/<name>.module
モジュール: /usr/lib/<hsm_pkcs11_name>。それで
(あるいは、システム全体のディレクトリにこれを作成することもできます/usr/share/p11-kit/modules/
。) - 必ずHSM を使用してください
p11-kit list
。p11tool --list-tokens
注: 手順 2 ~ 3 は、この計画では実際には必要ありません。これらは、起こりうる問題を早期に発見できるようにするためにのみ存在します。p11-kit が HSM モジュールと互換性がないことが判明した場合、作業が軽減されます。(互換性がある場合は、 を使用してp11tool
管理できます。)
次にTomcat側で:
- p11-kitもインストールします。
authorized_keys
Tomcat 用の SSH キー ペアを作成し、パスワードなしの SSH を使用するためにHSM アカウントに配置します。- 再度、Tomcat ユーザー アカウントのホーム ディレクトリにファイルを作成しますが、今回はファイルの内容は次のようになります。
~/.config/pkcs11/modules/<name>.module
リモート: |ssh user@hsmserver p11-kit リモート /usr/lib/<hsm_pkcs11_name>。それで
- もう一度、確認して
p11-kit list
動作p11tool --list-tokens
を確認してください。SSH 接続が魔法のように確立され、リモート HSM に関する情報が表示されるはずです。 - リモート アクセスを高速化するには、次の方法で SSH の接続多重化を有効にします
~/.ssh/config
。ホストhsmサーバー
コントロールパス ~/.ssh/S.%r@%h:%p
コントロールマスター 自動
コントロールパーシスト 1h
すべてがうまくいったら、keytool
p11-kit-proxy PKCS#11 モジュールを使用してみてください。
- 次のファイルを作成します
/etc/java-p11-kit.cfg
:名前 = p11-kit
(ライブラリパスはディストリビューションに応じて調整してください。この設定ファイルの完全なドキュメントはJava PKCS#11 ガイド。
ライブラリ = /usr/lib/p11-kit-proxy.so - ファイルに新しい行を追加します
java.security
:セキュリティプロバイダー。数=sun.security.pkcs11.SunPKCS11 /etc/java-p11-kit.cfg
- keytool を実行し、HSM の内容が表示されることを確認します。
キーツール --list --storetype PKCS11
最後に、p11-kit-proxy PKCS#11 モジュールを使用するように Tomcat を構成します。
<Connector ... keystore="NONE" keystoreType="PKCS11" keystoreProvider="SunPKCS11-p11-kit" keystorePass="[HSM PIN here]" />