JBoss EAP における SSL/TLS の設定
JBoss EAP で SSL/TLS を有効にして JBoss EAP 管理インターフェイスとデプロイされたアプリケーションをセキュアにする方法
概要
JBoss EAP ドキュメントへのフィードバック (英語のみ) リンクのコピーリンクがクリップボードにコピーされました!
エラーを報告したり、ドキュメントを改善したりするには、Red Hat Jira アカウントにログインし、課題を送信してください。Red Hat Jira アカウントをお持ちでない場合は、アカウントを作成するように求められます。
手順
- このリンクをクリック してチケットを作成します。
- Summary に課題の簡単な説明を入力します。
- Description に課題や機能拡張の詳細な説明を入力します。問題があるドキュメントのセクションへの URL も記載してください。
- Submit をクリックすると、課題が作成され、適切なドキュメントチームに転送されます。
多様性を受け入れるオープンソースの強化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、用語の置き換えは、今後の複数のリリースにわたって段階的に実施されます。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。
第1章 管理インターフェイスとアプリケーションの一方向 SSL/TLS の有効化 リンクのコピーリンクがクリップボードにコピーされました!
SSL/TLS、または Transport Layer Security (TLS) は、ネットワークを介して通信する 2 つのエンティティー間のデータ転送を保護するために使用される証明書ベースのセキュリティープロトコルです。
JBoss EAP 管理インターフェイスと JBoss EAP にデプロイされたアプリケーションの両方の一方向 SSL/TLS を有効にできます。詳細は、次の手順を参照してください。
1.1. 管理インターフェイスの一方向 SSL/TLS の有効化 リンクのコピーリンクがクリップボードにコピーされました!
管理インターフェイスの一方向 SSL/TLS を有効にして、JBoss EAP 管理インターフェイスとインターフェイスに接続するクライアントの通信が保護されるようにします。
以下の手順を使用して、管理インターフェイスの一方向 SSL/TLS を有効にできます。
- ウィザードを使用した管理インターフェイスの一方向 SSL/TLS の有効化: この手順を使用して、CLI ベースのウィザードを使用した SSL/TLS を迅速にセットアップします。Elytron はウィザードへの入力内容に基づいて、必要なリソースを作成します。
- サブシステムコマンドを使用した管理インターフェイスの一方向 SSL/TLS の有効化: この手順を使用して、SSL/TLS を手動で有効にするために必要なリソースを設定します。リソースを手動で設定すると、サーバー設定をより詳細に制御できます。
さらに、security コマンドを使用した管理インターフェイスの SSL/TLS の無効化 の手順を使用して、管理インターフェイスの SSL/TLS を無効にすることもできます。
1.1.1. ウィザードを使用した管理インターフェイスの一方向 SSL/TLS の有効化 リンクのコピーリンクがクリップボードにコピーされました!
Elytron は、SSL/TLS を迅速にセットアップするウィザードを提供します。証明書が含まれる既存のキーストアを使用するか、ウィザードが生成するキーストアと自己署名証明書を使用して、SSL/TLS を有効にできます。--lets-encrypt オプションを使用して、Let's Encrypt 認証局から証明書を取得して使用することもできます。Let's Encrypt の詳細は、Let’s Encrypt のドキュメント を参照してください。
ウィザードが生成する自己署名証明書を使用して、テストおよび開発の目的でのみ SSL/TLS を有効にします。実稼働環境では、常に認証局 (CA) 署名の証明書を使用します。
実稼働環境では自己署名証明書を使用しないでください。認証局 (CA) が署名した証明書のみ使用してください。
ウィザードは、管理インターフェイスの SSL/TLS を有効にするために必要な以下のリソースを設定します。
-
key-store -
key-manager -
server-ssl-context -
次に、
server-ssl-contextがhttp-interfaceに適用されます。
Elytron は各リソースに resource-type-UUID という名前を付けます。たとえば、key-store-9e35a3be-62bb-4fff-afc2-2d8d141b82bc などです。Universally Unique Identifier (UUID) は、リソース名の競合を回避する際に役立ちます。
前提条件
- JBoss EAP が実行している。
手順
ウィザードを起動し、管理 CLI で以下のコマンドを入力して管理インターフェイスの一方向 SSL/TLS を設定します。
構文
security enable-ssl-management --interactive
security enable-ssl-management --interactiveCopy to Clipboard Copied! Toggle word wrap Toggle overflow プロンプトが表示されたら、必要な情報を入力します。
--lets-encryptオプションを使用して、Let's Encrypt 認証局から証明書を取得して使用します。管理インターフェイスの SSL/TLS がすでに有効になっていると、ウィザードは終了し、次のメッセージが表示されます。
SSL is already enabled for http-interface
SSL is already enabled for http-interfaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 既存の設定を変更するには、最初に管理インターフェイスの SSL/TLS を無効にしてから、新しい設定を作成します。管理インターフェイスの SSL/TLS を無効にする方法の詳細は、ウィザードを使用した管理インターフェイスの SSL/TLS の無効化 を参照してください。
注記一方向 SSL/TLS を有効にするには、SSL 相互認証を有効にするようにプロンプトが表示されたら、
nを入力するか空白にします。相互認証を設定すると、双方向 SSL/TLS が有効になります。ウィザードの対話的な使用例
security enable-ssl-management --interactive
security enable-ssl-management --interactiveCopy to Clipboard Copied! Toggle word wrap Toggle overflow ウィザードプロンプトへの入力の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow yを入力すると、サーバーはリロードします。自己署名証明書を設定した場合、ウィザードを使用して自己署名証明書を生成した場合、または Java 仮想マシン (JVM) で信頼されない証明書を設定した場合、管理 CLI はサーバーが提示する証明書を受け入れるように要求します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow TまたはPを入力して接続を続行します。次の出力が得られます。
Server reloaded. SSL enabled for http-interface ssl-context is ssl-context-a18ba30e-6a26-4ed6-87c5-feb7f3e4dff1 key-manager is key-manager-a18ba30e-6a26-4ed6-87c5-feb7f3e4dff1 key-store is key-store-a18ba30e-6a26-4ed6-87c5-feb7f3e4dff1
Server reloaded. SSL enabled for http-interface ssl-context is ssl-context-a18ba30e-6a26-4ed6-87c5-feb7f3e4dff1 key-manager is key-manager-a18ba30e-6a26-4ed6-87c5-feb7f3e4dff1 key-store is key-store-a18ba30e-6a26-4ed6-87c5-feb7f3e4dff1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
管理 CLI クライアントと接続して SSL/TLS を確認します。
Elytron クライアント SSL コンテキストを設定ファイルに配置し、管理 CLI を使用してサーバーに接続して、設定ファイルを参照することで、SSL/TLS をテストできます。
キーストアファイルを含むディレクトリーに移動します。この例では、キーストアファイル
exampleKeystore.pkcs12がサーバーのstandalone/configurationディレクトリーに生成されました。例
cd JBOSS_HOME/standalone/configuration
$ cd JBOSS_HOME/standalone/configurationCopy to Clipboard Copied! Toggle word wrap Toggle overflow サーバー証明書を使用して、クライアント
trust-storeを作成します。構文
keytool -importcert -keystore <trust_store_name> -storepass <password> -alias <alias> -trustcacerts -file <file_containing_server_certificate>
$ keytool -importcert -keystore <trust_store_name> -storepass <password> -alias <alias> -trustcacerts -file <file_containing_server_certificate>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
keytool -importcert -keystore client.truststore.pkcs12 -storepass secret -alias localhost -trustcacerts -file exampleKeystore.pem
$ keytool -importcert -keystore client.truststore.pkcs12 -storepass secret -alias localhost -trustcacerts -file exampleKeystore.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 自己署名証明書を使用した場合は、証明書を信頼するように求められます。
ファイルでクライアント側の SSL コンテキストを定義します (例:
example-security.xml)。構文
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーに接続してコマンドを発行します。
例
EAP_HOME/bin/jboss-cli.sh -c --controller=remote+https://127.0.0.1:9993 -Dwildfly.config.url=<path_to_the_configuration_file>/example-security.xml :whoami
$ EAP_HOME/bin/jboss-cli.sh -c --controller=remote+https://127.0.0.1:9993 -Dwildfly.config.url=<path_to_the_configuration_file>/example-security.xml :whoamiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
{ "outcome" => "success", "result" => {"identity" => {"username" => "$local"}} }{ "outcome" => "success", "result" => {"identity" => {"username" => "$local"}} }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ブラウザーを使用して SSL/TLS を確認します。
https://localhost:9993 に移動します。
自己署名証明書を使用した場合が、サーバーが提示した証明書が不明であるという警告がブラウザーに表示されます。
証明書を調べて、ブラウザーに表示されるフィンガープリントが、キーストアの証明書のフィンガープリントと一致することを確認します。次のコマンドを使用して、生成した証明書を表示できます。
構文
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=key-store-a18ba30e-6a26-4ed6-87c5-feb7f3e4dff1:read-alias(alias="localhost")
/subsystem=elytron/key-store=key-store-a18ba30e-6a26-4ed6-87c5-feb7f3e4dff1:read-alias(alias="localhost")Copy to Clipboard Copied! Toggle word wrap Toggle overflow ウィザードの出力からキーストア名を取得できます (例: "key-store is key-store-a18ba30e-6a26-4ed6-87c5-feb7f3e4dff1")。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバー証明書を許可すると、ログイン認証情報の入力を求められます。既存 JBoss EAP ユーザーのユーザー認証情報を使用してログインできます。
これで、SSL/TLS が JBoss EAP 管理インターフェイスに対して有効になりました。
1.1.2. サブシステムコマンドを使用した管理インターフェイスの一方向 SSL/TLS の有効化 リンクのコピーリンクがクリップボードにコピーされました!
elytron サブシステムコマンドを使用して、JBoss EAP 管理インターフェイスを SSL/TLS で保護します。
テストおよび開発の目的で、自己署名証明書を使用できます。証明書が含まれる既存のキーストアを使用するか、key-store リソースの作成時に Elytron が生成するキーストアを使用できます。実稼働環境では、常に認証局 (CA) 署名の証明書を使用します。
実稼働環境では自己署名証明書を使用しないでください。認証局 (CA) が署名した証明書のみ使用してください。
前提条件
- JBoss EAP が実行している。
手順
証明書を格納するようにキーストアを設定します。
たとえば、CA 署名の証明書が含まれるキーストアなどの既存のキーストアへのパスを指定するか、作成するキーストアへのパスを指定できます。
/subsystem=elytron/key-store=<keystore_name>:add(path=<path_to_keystore>, credential-reference=<credential_reference>, type=<keystore_type>)
/subsystem=elytron/key-store=<keystore_name>:add(path=<path_to_keystore>, credential-reference=<credential_reference>, type=<keystore_type>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=exampleKeyStore:add(path=exampleserver.keystore.pkcs12, relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)/subsystem=elytron/key-store=exampleKeyStore:add(path=exampleserver.keystore.pkcs12, relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)Copy to Clipboard Copied! Toggle word wrap Toggle overflow キーストアに証明書が含まれていない場合や、上記の手順を使用してキーストアを作成した場合は、証明書を生成し、証明書をファイルに保存する必要があります。
キーストアでキーペアを生成します。
構文
/subsystem=elytron/key-store=<keystore_name>:generate-key-pair(alias=<keystore_alias>,algorithm=<algorithm>,key-size=<key_size>,validity=<validity_in_days>,credential-reference=<credential_reference>,distinguished-name="<distinguished_name>")
/subsystem=elytron/key-store=<keystore_name>:generate-key-pair(alias=<keystore_alias>,algorithm=<algorithm>,key-size=<key_size>,validity=<validity_in_days>,credential-reference=<credential_reference>,distinguished-name="<distinguished_name>")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=exampleKeyStore:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost")/subsystem=elytron/key-store=exampleKeyStore:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 証明書をファイルに保存します。
構文
/subsystem=elytron/key-store=<keystore_name>:store()
/subsystem=elytron/key-store=<keystore_name>:store()Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=exampleKeyStore:store()
/subsystem=elytron/key-store=exampleKeyStore:store()Copy to Clipboard Copied! Toggle word wrap Toggle overflow
key-storeを参照するkey-managerを設定します。構文
/subsystem=elytron/key-manager=<key-manager_name>:add(key-store=<key-store_name>,credential-reference=<credential_reference>)
/subsystem=elytron/key-manager=<key-manager_name>:add(key-store=<key-store_name>,credential-reference=<credential_reference>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-manager=exampleKeyManager:add(key-store=exampleKeyStore,credential-reference={clear-text=secret})/subsystem=elytron/key-manager=exampleKeyManager:add(key-store=exampleKeyStore,credential-reference={clear-text=secret})Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要elytronサブシステムはデフォルトでKeyManagerFactory.getDefaultAlgorithm()を使用してアルゴリズムを決定するため、Red Hat はアルゴリズム属性を指定しませんでした。ただし、アルゴリズム属性は指定できます。アルゴリズム属性を指定するには、使用している Java Development Kit (JDK) が提供するキーマネージャーアルゴリズムを知る必要があります。たとえば、Java Secure Socket Extension (SunJSSE) を使用する JDK は、PKIX および SunX509 アルゴリズムを提供します。
このコマンドでは、SunX509 を
key-managerアルゴリズム属性として指定できます。key-managerを参照するserver-ssl-contextを設定します。構文
/subsystem=elytron/server-ssl-context=<server-ssl-context_name>:add(key-manager=<key-manager_name>, protocols=<list_of_protocols>)
/subsystem=elytron/server-ssl-context=<server-ssl-context_name>:add(key-manager=<key-manager_name>, protocols=<list_of_protocols>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/server-ssl-context=examplehttpsSSC:add(key-manager=exampleKeyManager, protocols=["TLSv1.2"])
/subsystem=elytron/server-ssl-context=examplehttpsSSC:add(key-manager=exampleKeyManager, protocols=["TLSv1.2"])Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要利用できるようにする必要のある SSL/TLS プロトコルを決定する必要があります。コマンド例は TLSv1.2 を使用します。
-
TLSv1.2 以前の場合は、
cipher-suite-filter引数を使用して、許可される暗号スイートを指定します。 -
TLSv1.3 の場合は、
cipher-suite-names引数を使用して、許可される暗号スイートを指定します。TLSv1.3 は、デフォルトでは無効になっています。protocols属性でプロトコルを指定しない場合、または指定されたセットに TLSv1.3 が含まれている場合は、cipher-suite-namesを設定すると TLSv1.3 が有効になります。
use-cipher-suites-order引数を使用して、サーバーの暗号スイートの順序に従います。use-cipher-suites-order属性は、デフォルトでtrueに設定されています。これは、デフォルトでクライアント暗号スイートの順序に従うレガシーセキュリティーサブシステムの動作とは異なります。-
TLSv1.2 以前の場合は、
設定した
server-ssl-contextを使用するように管理インターフェイスを更新します。構文
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=<server-ssl-context_name>) /core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=<server-ssl-context_name>) /core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=examplehttpsSSC) /core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=examplehttpsSSC) /core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーをリロードします。
reload
reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow SSL/TLS を有効にするために自己署名証明書を使用した場合、管理 CLI はサーバーが提示する証明書を受け入れるように要求します。これは、キーストアを設定した証明書です。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow TまたはPを入力して接続を続行します。
検証
クライアントを介して接続して SSL/TLS を確認します。
設定ファイル内に Elytron クライアント SSL コンテキストを配置し、設定ファイルを参照する管理 CLI を使用してサーバーに接続すると、SSL/TLS をテストできます。
キーストアファイルを含むディレクトリーに移動します。この例では、キーストアファイル
exampleserver.keystore.pkcs12がサーバーのstandalone/configurationディレクトリーに生成されました。例
cd JBOSS_HOME/standalone/configuration
$ cd JBOSS_HOME/standalone/configurationCopy to Clipboard Copied! Toggle word wrap Toggle overflow サーバー証明書をエクスポートして、クライアントトラストストアにインポートできるようにします。
keytool -export -alias <alias> -keystore <key_store> -storepass <keystore_password>-file <file_name>
$ keytool -export -alias <alias> -keystore <key_store> -storepass <keystore_password>-file <file_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
keytool -export -alias localhost -keystore exampleserver.keystore.pkcs12 -file -storepass secret server.cer
$ keytool -export -alias localhost -keystore exampleserver.keystore.pkcs12 -file -storepass secret server.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow サーバー証明書を使用して、クライアント
trust-storeを作成します。構文
keytool -importcert -keystore <trust_store_name> -storepass <password> -alias <alias> -trustcacerts -file <file_containing_server_certificate>
$ keytool -importcert -keystore <trust_store_name> -storepass <password> -alias <alias> -trustcacerts -file <file_containing_server_certificate>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
keytool -importcert -keystore client.truststore.pkcs12 -storepass secret -alias localhost -trustcacerts -file server.cer
$ keytool -importcert -keystore client.truststore.pkcs12 -storepass secret -alias localhost -trustcacerts -file server.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 自己署名証明書を使用した場合は、証明書を信頼するように求められます。
ファイルでクライアント側の SSL コンテキストを定義します (例:
example-security.xml)。構文
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーに接続してコマンドを発行します。
例
EAP_HOME/bin/jboss-cli.sh -c --controller=remote+https://127.0.0.1:9993 -Dwildfly.config.url=example-security.xml :whoami
$ EAP_HOME/bin/jboss-cli.sh -c --controller=remote+https://127.0.0.1:9993 -Dwildfly.config.url=example-security.xml :whoamiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
{ "outcome" => "success", "result" => {"identity" => {"username" => "$local"}} }{ "outcome" => "success", "result" => {"identity" => {"username" => "$local"}} }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ブラウザーを使用して SSL/TLS を確認します。
https://localhost:9993 に移動します。
自己署名証明書を使用した場合が、サーバーが提示した証明書が不明であるという警告がブラウザーに表示されます。
証明書を調べて、ブラウザーに表示されるフィンガープリントが、キーストアの証明書のフィンガープリントと一致することを確認します。次のコマンドを使用して、生成した証明書を表示できます。
構文
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=exampleKeyStore:read-alias(alias="localhost")
/subsystem=elytron/key-store=exampleKeyStore:read-alias(alias="localhost")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバー証明書を許可すると、ログイン認証情報の入力を求められます。既存 JBoss EAP ユーザーのユーザー認証情報を使用してログインできます。
これで、SSL/TLS が JBoss EAP 管理インターフェイスに対して有効になりました。
1.1.3. security コマンドを使用した管理インターフェイスの SSL/TLS の無効化 リンクのコピーリンクがクリップボードにコピーされました!
security コマンドを使用して、管理インターフェイスの SSL/TLS を無効にします。これを実行して、設定されているものとは異なる SSL/TLS 設定を使用することを推奨します。
コマンドを使用して SSL/TLS を無効にしても、Elytron リソースは削除されません。このコマンドは単に、http-interface management-interface リソースの secure-socket-binding および ssl-context 属性の定義を解除します。
前提条件
- JBoss EAP が実行している。
手順
管理 CLI で
disable-ssl-managementコマンドを使用します。security disable-ssl-management
security disable-ssl-managementCopy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーがリロードされ、以下の出力が表示されます。
... Server reloaded. Reconnected to server. SSL disabled for http-interface
... Server reloaded. Reconnected to server. SSL disabled for http-interfaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
以下のいずれかの方法で、サーバー管理インターフェイスに対して SSL/TLS を有効にできます。
- ウィザードを使用した管理インターフェイスの一方向 SSL/TLS の有効化: この手順を使用して、CLI ベースのウィザードを使用した SSL/TLS を迅速にセットアップします。Elytron はウィザードへの入力内容に基づいて、必要なリソースを作成します。
- サブシステムコマンドを使用した管理インターフェイスの一方向 SSL/TLS の有効化: この手順を使用して、SSL/TLS を手動で有効にするために必要なリソースを設定します。リソースを手動で設定すると、サーバー設定をより詳細に制御できます。
1.2. JBoss EAP にデプロイされたアプリケーションの一方向 SSL/TLS の有効化 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP にデプロイされたアプリケーションの一方向 SSL/TLS を有効にして、Web ブラウザーなどのアプリケーションとクライアント間の通信が保護されるようにします。
以下の手順を使用して、JBoss EAP にデプロイされたアプリケーションの一方向 SSL/TLS を有効にできます。
- 自動生成された自己署名証明書を使用したアプリケーションの SSL/TLS の有効化: この手順は、開発環境またはテスト環境でのみ使用してください。この手順は、設定を行わずにアプリケーションの SSL/TLS を迅速に有効にする上で役立ちます。
- ウィザードを使用して JBoss EAP にデプロイされたアプリケーションの一方向 SSL/TLS の有効化: この手順を使用し、CLI ベースのウィザードを使用して SSL/TLS を迅速にセットアップします。Elytron はウィザードへの入力内容に基づいて、必要なリソースを作成します。
- サブシステムコマンドを使用したアプリケーションの一方向 SSL/TLS の有効化: この方法を使用して、SSL/TLS を手動で有効にするために必要なリソースを設定します。リソースを手動で設定すると、サーバー設定をより詳細に制御できます。
さらに、security コマンドを使用したアプリケーションの SSL/TLS の無効化 の手順を使用して、JBoss EAP にデプロイされたアプリケーションの SSL/TLS を無効にできます。
1.2.1. Elytron のデフォルトの SSL コンテキスト リンクのコピーリンクがクリップボードにコピーされました!
開発者がアプリケーションの一方向 SSL/TLS を迅速にセットアップできるようにするために、elytron サブシステムには一方向 SSL/TLS を有効にするために必要なリソースが含まれ、デフォルトで開発環境またはテスト環境ですぐに使用できます。
デフォルトで以下のリソースが提供されます。
-
applicationKSという名前のkey-store。 -
key-storeを参照するapplicationKMという名前のkey-manager。 -
key-managerを参照するapplicationSSCという名前のserver-ssl-context。
デフォルトの TLS 設定
デフォルトの key-manager、applicationKM には、localhost の値を持つ generate-self-signed-certificate-host 属性が含まれます。generate-self-signed-certificate-host 属性は、この key-manager を使用してサーバーの証明書を取得する場合、その key-store をサポートするファイルがまだ存在しない場合は、key-manager が localhost を Common Name として自己署名証明書を自動的に生成することを示します。この生成された自己署名証明書は、key-store をサポートするファイルに保存されます。
サーバーのインストール時に、デフォルトの key-store をサポートするファイルが存在しないため、サーバーに https 要求を送信するだけで自己署名証明書が生成され、アプリケーションの一方向 SSL/TLS が有効になります。詳細は、自動生成された自己署名証明書を使用したアプリケーションの SSL/TLS の有効化 を参照してください。
1.2.2. 自動生成された自己署名証明書を使用したアプリケーションの SSL/TLS の有効化 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP は、サーバーが HTTPS 要求を初めて受信したときに自己署名証明書を自動的に生成します。elytron サブシステムには、デフォルトで開発環境またはテスト環境ですぐに使用できる key-store、key-manager、および server-ssl-context リソースも含まれます。そのため、JBoss EAP が自己署名証明書を生成するとすぐに、アプリケーションはその証明書を使用して保護されます。
実稼働環境では自己署名証明書を使用しないでください。認証局 (CA) が署名した証明書のみ使用してください。
前提条件
- JBoss EAP が実行している。
手順
ポート
8443のサーバー URL に移動します (例: https://localhost:8443)。JBoss EAP はこのリクエストを受信すると、自己署名証明書を生成します。この証明書の詳細は、サーバーログで確認できます。
生成された証明書は自己署名されているため、ブラウザーは接続が安全ではないとしてフラグを立てます。
検証
JBoss EAP がブラウザーに提示した証明書とサーバーログの証明書を比較します。
サーバーログの例
17:50:24,086 WARN [org.wildfly.extension.elytron] (default task-1) WFLYELY01085: Generated self-signed certificate at /home/user1/Downloads/wildflies/wildfly-27.0.1.Final/standalone/configuration/application.keystore. Please note that self-signed certificates are not secure and should only be used for testing purposes. Do not use this self-signed certificate in production. SHA-1 fingerprint of the generated key is 11:2f:e7:8c:18:b7:2c:c1:b0:5a:ad:ea:83:e0:32:59:ba:73:91:e2 SHA-256 fingerprint of the generated key is b2:a4:ed:b0:5c:c2:a1:4c:ca:39:03:e8:3a:11:e4:c5:c4:81:9d:46:97:7c:e6:6f:0c:45:f6:5d:64:3f:0d:64
17:50:24,086 WARN [org.wildfly.extension.elytron] (default task-1) WFLYELY01085: Generated self-signed certificate at /home/user1/Downloads/wildflies/wildfly-27.0.1.Final/standalone/configuration/application.keystore. Please note that self-signed certificates are not secure and should only be used for testing purposes. Do not use this self-signed certificate in production. SHA-1 fingerprint of the generated key is 11:2f:e7:8c:18:b7:2c:c1:b0:5a:ad:ea:83:e0:32:59:ba:73:91:e2 SHA-256 fingerprint of the generated key is b2:a4:ed:b0:5c:c2:a1:4c:ca:39:03:e8:3a:11:e4:c5:c4:81:9d:46:97:7c:e6:6f:0c:45:f6:5d:64:3f:0d:64Copy to Clipboard Copied! Toggle word wrap Toggle overflow ブラウザーに提示された証明書の例
SHA-256 Fingerprint B2 A4 ED B0 5C C2 A1 4C CA 39 03 E8 3A 11 E4 C5 C4 81 9D 46 97 7C E6 6F 0C 45 F6 5D 64 3F 0D 64 SHA-1 Fingerprint 11 2F E7 8C 18 B7 2C C1 B0 5A AD EA 83 E0 32 59 BA 73 91 E2
SHA-256 Fingerprint B2 A4 ED B0 5C C2 A1 4C CA 39 03 E8 3A 11 E4 C5 C4 81 9D 46 97 7C E6 6F 0C 45 F6 5D 64 3F 0D 64 SHA-1 Fingerprint 11 2F E7 8C 18 B7 2C C1 B0 5A AD EA 83 E0 32 59 BA 73 91 E2Copy to Clipboard Copied! Toggle word wrap Toggle overflow - この例のようにフィンガープリントが一致する場合は、そのページに進むことができます。
SSL/TLS がアプリケーション用に有効になっています。
1.2.3. ウィザードを使用した JBoss EAP にデプロイされたアプリケーションの一方向 SSL/TLS の有効化 リンクのコピーリンクがクリップボードにコピーされました!
Elytron は、SSL/TLS を迅速にセットアップするウィザードを提供します。証明書が含まれる既存のキーストアを使用するか、ウィザードが生成するキーストアと自己署名証明書を使用して、SSL/TLS を有効にできます。--lets-encrypt オプションを使用して、Let's Encrypt 認証局から証明書を取得して使用することもできます。Let's Encrypt の詳細は、Let’s Encrypt のドキュメント を参照してください。
ウィザードが生成する自己署名証明書を使用して、テストおよび開発の目的でのみ SSL/TLS を有効にします。実稼働環境では、常に認証局 (CA) 署名の証明書を使用します。
実稼働環境では自己署名証明書を使用しないでください。認証局 (CA) が署名した証明書のみ使用してください。
ウィザードは、アプリケーションの SSL/TLS を有効にするために必要な以下のリソースを設定します。
-
key-store -
key-manager -
server-ssl-context -
次に、
server-ssl-contextは Undertowhttps-listenerに適用されます。
Elytron は各リソースに resource-type-UUID という名前を付けます。たとえば、key-store-9e35a3be-62bb-4fff-afc2-2d8d141b82bc などです。Universally Unique Identifier (UUID) は、リソース名の競合を回避する際に役立ちます。
前提条件
- JBoss EAP が実行している。
手順
管理 CLI で以下のコマンドを入力して、ウィザードを起動し、アプリケーションの一方向 SSL/TLS を設定します。
構文
security enable-ssl-http-server --interactive
security enable-ssl-http-server --interactiveCopy to Clipboard Copied! Toggle word wrap Toggle overflow プロンプトが表示されたら、必要な情報を入力します。
--lets-encryptオプションを使用して、Let's Encrypt 認証局から証明書を取得して使用します。server-ssl-contextがすでに存在する場合、ウィザードは以下のメッセージで終了します。An SSL server context already exists on the HTTPS listener, use --override-ssl-context option to overwrite the existing SSL context
An SSL server context already exists on the HTTPS listener, use --override-ssl-context option to overwrite the existing SSL contextCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記elytronサブシステムには、デフォルトで設定済みのserver-ssl-contextリソースが含まれています。したがって、新規インストール後にウィザードを初めて起動するときは、--override-ssl-contextオプションを使用する必要があります。詳細は、Elytron のデフォルトの SSL コンテキスト を参照してください。
既存の
server-ssl-contextをオーバーライドすると、Elytron はウィザードによって作成されたserver-ssl-contextを使用して SSL を有効にします。注記一方向 SSL/TLS を有効にするには、SSL 相互認証を有効にするようにプロンプトが表示されたら、
nを入力するか空白にします。相互認証を設定すると、双方向 SSL/TLS が有効になります。ウィザードの起動例
security enable-ssl-http-server --interactive --override-ssl-context
security enable-ssl-http-server --interactive --override-ssl-contextCopy to Clipboard Copied! Toggle word wrap Toggle overflow ウィザードプロンプトへの入力の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow yを入力すると、サーバーは以下の出力で再読み込みされます。Server reloaded. SSL enabled for default-server ssl-context is ssl-context-4cba6678-c464-4dcc-90ff-9295312ac395 key-manager is key-manager-4cba6678-c464-4dcc-90ff-9295312ac395 key-store is key-store-4cba6678-c464-4dcc-90ff-9295312ac395
Server reloaded. SSL enabled for default-server ssl-context is ssl-context-4cba6678-c464-4dcc-90ff-9295312ac395 key-manager is key-manager-4cba6678-c464-4dcc-90ff-9295312ac395 key-store is key-store-4cba6678-c464-4dcc-90ff-9295312ac395Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
https://localhost:8443 に移動します。
自己署名証明書を使用した場合が、サーバーが提示した証明書が不明であるという警告がブラウザーに表示されます。
証明書を調べて、ブラウザーに表示されるフィンガープリントが、キーストアの証明書のフィンガープリントと一致することを確認します。次のコマンドを使用して、生成した証明書を表示できます。
構文
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=key-store-4cba6678-c464-4dcc-90ff-9295312ac395:read-alias(alias="localhost")
/subsystem=elytron/key-store=key-store-4cba6678-c464-4dcc-90ff-9295312ac395:read-alias(alias="localhost")Copy to Clipboard Copied! Toggle word wrap Toggle overflow ウィザードの出力からキーストア名を取得できます (例: "key-store is key-store-4cba6678-c464-4dcc-90ff-9295312ac395")。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
JBoss EAP にデプロイされたアプリケーションの SSL/TLS が有効になりました。
1.2.4. サブシステムコマンドを使用したアプリケーションの一方向 SSL/TLS の有効化 リンクのコピーリンクがクリップボードにコピーされました!
elytron サブシステムコマンドを使用して、JBoss EAP にデプロイされたアプリケーションを SSL/TLS で保護します。
テストおよび開発の目的で、自己署名証明書を使用できます。証明書が含まれる既存のキーストアを使用するか、key-store リソースの作成時に Elytron が生成するキーストアを使用できます。実稼働環境では、常に認証局 (CA) 署名の証明書を使用します。
実稼働環境では自己署名証明書を使用しないでください。認証局 (CA) が署名した証明書のみ使用してください。
前提条件
- JBoss EAP が実行している。
手順
証明書を格納するようにキーストアを設定します。
たとえば、CA 署名の証明書が含まれるキーストアなどの既存のキーストアへのパスを指定するか、作成するキーストアへのパスを指定できます。
/subsystem=elytron/key-store=<keystore_name>:add(path=<path_to_keystore>, credential-reference=<credential_reference>, type=<keystore_type>)
/subsystem=elytron/key-store=<keystore_name>:add(path=<path_to_keystore>, credential-reference=<credential_reference>, type=<keystore_type>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=exampleKeyStore:add(path=exampleserver.keystore.pkcs12, relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)/subsystem=elytron/key-store=exampleKeyStore:add(path=exampleserver.keystore.pkcs12, relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)Copy to Clipboard Copied! Toggle word wrap Toggle overflow キーストアに証明書が含まれていない場合や、上記の手順を使用してキーストアを作成した場合は、証明書を生成し、証明書をファイルに保存する必要があります。
キーストアでキーペアを生成します。
構文
/subsystem=elytron/key-store=<keystore_name>:generate-key-pair(alias=<keystore_alias>,algorithm=<algorithm>,key-size=<key_size>,validity=<validity_in_days>,credential-reference=<credential_reference>,distinguished-name="<distinguished_name>")
/subsystem=elytron/key-store=<keystore_name>:generate-key-pair(alias=<keystore_alias>,algorithm=<algorithm>,key-size=<key_size>,validity=<validity_in_days>,credential-reference=<credential_reference>,distinguished-name="<distinguished_name>")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=exampleKeyStore:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost")/subsystem=elytron/key-store=exampleKeyStore:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 証明書をファイルに保存します。
構文
/subsystem=elytron/key-store=<keystore_name>:store()
/subsystem=elytron/key-store=<keystore_name>:store()Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=exampleKeyStore:store()
/subsystem=elytron/key-store=exampleKeyStore:store()Copy to Clipboard Copied! Toggle word wrap Toggle overflow
key-storeを参照するkey-managerを設定します。構文
/subsystem=elytron/key-manager=<key-manager_name>:add(key-store=<key-store_name>,credential-reference=<credential_reference>)
/subsystem=elytron/key-manager=<key-manager_name>:add(key-store=<key-store_name>,credential-reference=<credential_reference>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-manager=exampleKeyManager:add(key-store=exampleKeyStore,credential-reference={clear-text=secret})/subsystem=elytron/key-manager=exampleKeyManager:add(key-store=exampleKeyStore,credential-reference={clear-text=secret})Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要elytronサブシステムはデフォルトでKeyManagerFactory.getDefaultAlgorithm()を使用してアルゴリズムを決定するため、Red Hat はアルゴリズム属性を指定しませんでした。ただし、アルゴリズム属性は指定できます。アルゴリズム属性を指定するには、使用している Java Development Kit (JDK) が提供するキーマネージャーアルゴリズムを知る必要があります。たとえば、Java Secure Socket Extension (SunJSSE) を使用する JDK は、PKIX および SunX509 アルゴリズムを提供します。
このコマンドでは、SunX509 を
key-managerアルゴリズム属性として指定できます。key-managerを参照するserver-ssl-contextを設定します。構文
/subsystem=elytron/server-ssl-context=<server-ssl-context_name>:add(key-manager=<key-manager_name>, protocols=<list_of_protocols>)
/subsystem=elytron/server-ssl-context=<server-ssl-context_name>:add(key-manager=<key-manager_name>, protocols=<list_of_protocols>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/server-ssl-context=examplehttpsSSC:add(key-manager=exampleKeyManager, protocols=["TLSv1.2"])
/subsystem=elytron/server-ssl-context=examplehttpsSSC:add(key-manager=exampleKeyManager, protocols=["TLSv1.2"])Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要利用できるようにする必要のある SSL/TLS プロトコルを決定する必要があります。コマンド例は TLSv1.2 を使用します。
-
TLSv1.2 以前の場合は、
cipher-suite-filter引数を使用して、許可される暗号スイートを指定します。 -
TLSv1.3 の場合は、
cipher-suite-names引数を使用して、許可される暗号スイートを指定します。TLSv1.3 は、デフォルトでは無効になっています。protocols属性でプロトコルを指定しない場合、または指定されたセットに TLSv1.3 が含まれている場合は、cipher-suite-namesを設定すると TLSv1.3 が有効になります。
use-cipher-suites-order引数を使用して、サーバーの暗号スイートの順序に従います。use-cipher-suites-order属性は、デフォルトでtrueに設定されています。これは、デフォルトでクライアント暗号スイートの順序に従うレガシーセキュリティーサブシステムの動作とは異なります。-
TLSv1.2 以前の場合は、
設定された
server-ssl-contextを使用するように Undertow を更新します。構文
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context, value=<server-ssl-context_name>)
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context, value=<server-ssl-context_name>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context, value=examplehttpsSSC)
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context, value=examplehttpsSSC)Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーをリロードします。
reload
reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
https://localhost:8443 に移動します。
自己署名証明書を使用した場合が、サーバーが提示した証明書が不明であるという警告がブラウザーに表示されます。
証明書を調べて、ブラウザーに表示されるフィンガープリントが、キーストアの証明書のフィンガープリントと一致することを確認します。次のコマンドを使用して、生成した証明書を表示できます。
構文
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=exampleKeyStore:read-alias(alias=localhost)
/subsystem=elytron/key-store=exampleKeyStore:read-alias(alias=localhost)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
JBoss EAP にデプロイされたアプリケーションの SSL/TLS が有効になりました。
1.2.5. security コマンドを使用したアプリケーションの SSL/TLS の無効化 リンクのコピーリンクがクリップボードにコピーされました!
security コマンドを使用して、JBoss EAP にデプロイされたアプリケーションの SSL/TLS を無効にします。コマンドを使用して SSL/TLS を無効にしても、Elytron リソースは削除されません。このコマンドは、サーバーの ssl-context をデフォルト値の applicationSSC に設定します。
前提条件
- JBoss EAP が実行している。
手順
管理 CLI で
security disable-ssl-http-serverコマンドを使用します。security disable-ssl-http-server
security disable-ssl-http-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーがリロードされ、以下の出力が表示されます。
... Server reloaded. SSL disabled for default-server
... Server reloaded. SSL disabled for default-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow
以下の手順の 1 つを使用すると、JBoss EAP にデプロイされたアプリケーションの SSL/TLS を有効にできます。
- 自動生成された自己署名証明書を使用したアプリケーションの SSL/TLS の有効化: この手順は、開発環境またはテスト環境でのみ使用してください。この手順は、設定を行わずにアプリケーションの SSL/TLS を迅速に有効にする上で役立ちます。
- ウィザードを使用して JBoss EAP にデプロイされたアプリケーションの一方向 SSL/TLS の有効化: この手順を使用し、CLI ベースのウィザードを使用して SSL/TLS を迅速にセットアップします。Elytron はウィザードへの入力内容に基づいて、必要なリソースを作成します。
- サブシステムコマンドを使用したアプリケーションの一方向 SSL/TLS の有効化: この方法を使用して、SSL/TLS を手動で有効にするために必要なリソースを設定します。リソースを手動で設定すると、サーバー設定をより詳細に制御できます。
第2章 管理インターフェイスとアプリケーションの双方向 SSL/TLS の有効化 リンクのコピーリンクがクリップボードにコピーされました!
SSL/TLS、または Transport Layer Security (TLS) は、ネットワークを介して通信する 2 つのエンティティー間のデータ転送を保護するために使用される証明書ベースのセキュリティープロトコルです。サーバーが信頼できるクライアントとのみ接続するようにする場合は、双方向 SSL/TLS を使用します。
双方向 SSL/TLS は、次のセキュリティー機能を提供します。
- 認証
- 一方向 SSL/TLS の場合、サーバーは証明書をクライアントに提示してサーバー自体を認証します。双方向 SSL/TLS の場合は、クライアントもサーバーに証明書を提示し、サーバーがクライアントを認証します。したがって、双方向 SSL/TLS は相互認証とも呼ばれます。
- 機密性
- クライアントとサーバー間で転送されるデータは暗号化されます。
- データの整合性
-
TLS プロトコルは、メッセージ認証コード (MAC) の計算に使用されるセキュアなハッシュ関数でデータインテグリティーを提供します。SSL コンテキストリソースの
cipher-suite-filter属性とcipher-suite-names属性を使用して、接続に特定のアルゴリズムとハッシュ関数を適用できます。
詳細は、server-ssl-context 属性 を参照してください。
双方向 SSL/TLS を使用して、JBoss EAP 管理インターフェイスとデプロイされたアプリケーションの両方を保護できます。
双方向 SSL/TLS で管理インターフェイスを保護するには、次の手順を使用します。
- クライアントの認証局 (CA) から証明書を取得します。または、非実稼働環境では、クライアント証明書の生成 の手順に従って、自己署名証明書を生成できます。
- クライアント証明書のトラストストアとトラストマネージャーを設定します。
- 双方向 SSL/TLS のサーバー証明書を設定します。
- SSL/TLS で JBoss EAP 管理インターフェイスをセキュアにするための SSL コンテキストを設定します。
双方向 SSL/TLS を使用して JBoss EAP にデプロイされたアプリケーションを保護するには、次の手順を使用します。
- クライアントの認証局 (CA) から証明書を取得します。または、非実稼働環境では、クライアント証明書の生成 の手順に従って、自己署名証明書を生成できます。
- クライアント証明書のトラストストアとトラストマネージャーを設定します。
- 双方向 SSL/TLS 用サーバー証明書の設定
- SSL/TLS を使用して JBoss EAP にデプロイされたアプリケーションを保護するための SSL コンテキストを設定します。
Elytron における証明書失効チェックの設定 の手順に従って、証明書失効チェックを設定できます。
2.1. クライアント証明書の生成 リンクのコピーリンクがクリップボードにコピーされました!
双方向 SSL/TLS 設定のテストと開発を目的として、CLI で keytool コマンドを使用し、自己署名クライアント証明書を生成します。
実稼働環境では自己署名証明書を使用しないでください。認証局 (CA) が署名した証明書のみ使用してください。
手順
クライアント証明書を生成します。
構文
keytool -genkeypair -alias <keystore_alias> -keyalg <algorithm> -keysize <key_size> -validity <validity_in_days> -keystore <keystore_name> -dname "<distinguished_name>" -keypass <private_key_password> -storepass <keystore_password>
$ keytool -genkeypair -alias <keystore_alias> -keyalg <algorithm> -keysize <key_size> -validity <validity_in_days> -keystore <keystore_name> -dname "<distinguished_name>" -keypass <private_key_password> -storepass <keystore_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
keytool -genkeypair -alias exampleClientKeyStore -keyalg RSA -keysize 2048 -validity 365 -keystore exampleclient.keystore.pkcs12 -dname "CN=client" -keypass secret -storepass secret
$ keytool -genkeypair -alias exampleClientKeyStore -keyalg RSA -keysize 2048 -validity 365 -keystore exampleclient.keystore.pkcs12 -dname "CN=client" -keypass secret -storepass secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow クライアント証明書をファイルにエクスポートします。
構文
keytool -exportcert -keystore <keystore_name> -alias <keystore_alias> -keypass <private_key_password> -storepass <keystore_password> -file <file_path>
$ keytool -exportcert -keystore <keystore_name> -alias <keystore_alias> -keypass <private_key_password> -storepass <keystore_password> -file <file_path>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
keytool -exportcert -keystore exampleclient.keystore.pkcs12 -alias exampleClientKeyStore -keypass secret -storepass secret -file EAP_HOME/standalone/configuration/client.cer Certificate stored in file <EAP_HOME/standalone/configuration/client.cer>
$ keytool -exportcert -keystore exampleclient.keystore.pkcs12 -alias exampleClientKeyStore -keypass secret -storepass secret -file EAP_HOME/standalone/configuration/client.cer Certificate stored in file <EAP_HOME/standalone/configuration/client.cer>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
生成されたクライアント証明書を使用して、サーバーのトラストストアとトラストマネージャーをサーバーに設定できるようになりました。詳細は、クライアント証明書用のトラストストアとトラストマネージャーの設定 を参照してください。
2.2. クライアント証明書のトラストストアおよびトラストマネージャーの設定 リンクのコピーリンクがクリップボードにコピーされました!
クライアント証明書を使用してトラストストアを設定し、そのトラストストアへの参照を使用してトラストマネージャーを設定して、TLS ハンドシェイク中にクライアント証明書を検証します。
前提条件
クライアント証明書を取得または生成している。
詳細は、クライアント証明書の生成 を参照してください。
- JBoss EAP が実行している。
手順
管理 CLI を使用して、クライアント証明書でトラストストアを設定します。
信頼するクライアント証明書を格納するためのサーバートラストストアを作成します。
構文
/subsystem=elytron/key-store=<server_trust_store_name>:add(path=<path_to_server_trust_store_file>,credential-reference={<password>})/subsystem=elytron/key-store=<server_trust_store_name>:add(path=<path_to_server_trust_store_file>,credential-reference={<password>})Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=exampleServerTrustStore:add(path=exampleTLSServer.truststore,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret}) {"outcome" => "success"}/subsystem=elytron/key-store=exampleServerTrustStore:add(path=exampleTLSServer.truststore,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret}) {"outcome" => "success"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow クライアント証明書のエイリアスを指定して、クライアント証明書をサーバートラストストアにインポートします。サーバーのトラストストアが信頼する証明書を提示するクライアントのみがサーバーに接続できます。
注記自己署名証明書を使用して双方向 SSL/TLS を設定している場合は、証明書のトラストチェーンが存在しないため、
validateをfalseに設定します。CA によって署名された証明書を使用して実稼働環境で双方向 SSL/TLS を設定する場合は、
validateをtrueに設定します。構文
/subsystem=elytron/key-store=<server_trust_store_name>:import-certificate(alias=<alias>,path=<certificate_file>,credential-reference={<password>},trust-cacerts=<true_or_false>,validate=<true_false>)/subsystem=elytron/key-store=<server_trust_store_name>:import-certificate(alias=<alias>,path=<certificate_file>,credential-reference={<password>},trust-cacerts=<true_or_false>,validate=<true_false>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=exampleServerTrustStore:import-certificate(alias=client,path=client.cer,relative-to=jboss.server.config.dir,credential-reference={clear-text=serverTrustSecret},trust-cacerts=true,validate=false) {"outcome" => "success"}/subsystem=elytron/key-store=exampleServerTrustStore:import-certificate(alias=client,path=client.cer,relative-to=jboss.server.config.dir,credential-reference={clear-text=serverTrustSecret},trust-cacerts=true,validate=false) {"outcome" => "success"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow クライアント証明書をトラストストアファイルにエクスポートします。
構文
/subsystem=elytron/key-store=<server_trust_store_name>:store()
/subsystem=elytron/key-store=<server_trust_store_name>:store()Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=exampleServerTrustStore:store() { "outcome" => "success", "result" => undefined }/subsystem=elytron/key-store=exampleServerTrustStore:store() { "outcome" => "success", "result" => undefined }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
TLS ハンドシェーク中にクライアント証明書を検証するようにトラストマネージャーを設定します。
構文
/subsystem=elytron/trust-manager=<trust_manager_name>:add(key-store=<server_trust_store_name>)
/subsystem=elytron/trust-manager=<trust_manager_name>:add(key-store=<server_trust_store_name>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/trust-manager=exampleTLSTrustManager:add(key-store=exampleServerTrustStore) {"outcome" => "success"}/subsystem=elytron/trust-manager=exampleTLSTrustManager:add(key-store=exampleServerTrustStore) {"outcome" => "success"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
設定されたトラストストア内のクライアント証明書は、サーバーとの TLS ハンドシェイク中にクライアントが提示する証明書を検証するために使用されます。
2.3. 双方向 SSL/TLS 用サーバー証明書の設定 リンクのコピーリンクがクリップボードにコピーされました!
TLS ハンドシェイク中にクライアントに提示されるサーバー証明書を設定します。
前提条件
- JBoss EAP が実行している。
手順
テストおよび開発目的で使用する自己署名サーバー証明書を生成します。認証局 (CA) から証明書を取得している場合は、この手順を省略してください。
重要実稼働環境では自己署名証明書を使用しないでください。認証局 (CA) が署名した証明書のみ使用してください。
サーバー証明書を格納するキーストアを作成します。
構文
/subsystem=elytron/key-store=<key_store_name>:add(path=<path>,credential-reference={<password>},type=<key_store_type>)/subsystem=elytron/key-store=<key_store_name>:add(path=<path>,credential-reference={<password>},type=<key_store_type>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=exampleServerKeyStore:add(path=server.keystore.pkcs12,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12) {"outcome" => "success"}/subsystem=elytron/key-store=exampleServerKeyStore:add(path=server.keystore.pkcs12,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12) {"outcome" => "success"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow キーストアでサーバー証明書を生成します。
構文
/subsystem=elytron/key-store=<key_store_name>:generate-key-pair(alias=<alias>,algorithm=<algorithm>,key-size=<key_size>,validity=<validaity_in_days>,credential-reference={<password>},distinguished-name="<distinguished_name_in_certificate>")/subsystem=elytron/key-store=<key_store_name>:generate-key-pair(alias=<alias>,algorithm=<algorithm>,key-size=<key_size>,validity=<validaity_in_days>,credential-reference={<password>},distinguished-name="<distinguished_name_in_certificate>")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=exampleServerKeyStore:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost") {"outcome" => "success"}/subsystem=elytron/key-store=exampleServerKeyStore:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost") {"outcome" => "success"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow キーストアをファイルに格納します。
構文
/subsystem=elytron/key-store=<key_store_name>:store()
/subsystem=elytron/key-store=<key_store_name>:store()Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=exampleServerKeyStore:store() { "outcome" => "success", "result" => undefined }/subsystem=elytron/key-store=exampleServerKeyStore:store() { "outcome" => "success", "result" => undefined }Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバー証明書をエクスポートします。
構文
/subsystem=elytron/key-store=<key_store_name>:export-certificate(alias=<alias>,path=<path_to_certificate>,pem=true)
/subsystem=elytron/key-store=<key_store_name>:export-certificate(alias=<alias>,path=<path_to_certificate>,pem=true)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=exampleServerKeyStore:export-certificate(alias=localhost,path=server.cer,pem=true,relative-to=jboss.server.config.dir) {"outcome" => "success"}/subsystem=elytron/key-store=exampleServerKeyStore:export-certificate(alias=localhost,path=server.cer,pem=true,relative-to=jboss.server.config.dir) {"outcome" => "success"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
サーバーキーストアを参照するキーマネージャーを作成します。
構文
/subsystem=elytron/key-manager=<key_manager_name>:add(credential-reference={<password>},key-store=<key_store_name>)/subsystem=elytron/key-manager=<key_manager_name>:add(credential-reference={<password>},key-store=<key_store_name>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-manager=exampleServerKeyManager:add(credential-reference={clear-text=secret},key-store=exampleServerKeyStore) {"outcome" => "success"}/subsystem=elytron/key-manager=exampleServerKeyManager:add(credential-reference={clear-text=secret},key-store=exampleServerKeyStore) {"outcome" => "success"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow SSL/TLS が有効な場合、サーバーはこの証明書をクライアントに提示します。
サーバー証明書をクライアントのトラストストアにインポートして、クライアントが SSL ハンドシェーク中にサーバー証明書を検証できるようにします。
構文
keytool -import -file <server_certificate_file> -alias <alias> -keystore <client_trust_store_file> -storepass <password>
$ keytool -import -file <server_certificate_file> -alias <alias> -keystore <client_trust_store_file> -storepass <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow yesを入力します。次の出力が得られます。Certificate was added to keystore
Certificate was added to keystoreCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4. SSL/TLS を使用して JBoss EAP 管理インターフェイスをセキュリティー保護するための SSL コンテキスト設定 リンクのコピーリンクがクリップボードにコピーされました!
サーバーが信頼する証明書を提示するクライアントのみがサーバーの管理インターフェイスに接続できるように、JBoss EAP 管理インターフェイスを双方向 SSL/TLS でセキュリティー保護します。
前提条件
- JBoss EAP が実行している。
クライアント証明書用のサーバートラストストアとトラストマネージャーを設定している。
詳細は、クライアント証明書用のトラストストアとトラストマネージャーの設定 を参照してください。
サーバー証明書を設定している。
詳細は、SSL/TLS 用サーバー証明書の設定 を参照してください。
手順
サーバー SSL コンテキストを設定して、双方向 SSL を有効にします。
構文
/subsystem=elytron/server-ssl-context=<server_ssl_context_name>:add(key-manager=<key_manager_name>,trust-manager=<trust_manager_name>,need-client-auth=true)
/subsystem=elytron/server-ssl-context=<server_ssl_context_name>:add(key-manager=<key_manager_name>,trust-manager=<trust_manager_name>,need-client-auth=true)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/server-ssl-context=exampleServerSSLContext:add(key-manager=exampleServerKeyManager,trust-manager=exampleTLSTrustManager,need-client-auth=true) {"outcome" => "success"}/subsystem=elytron/server-ssl-context=exampleServerSSLContext:add(key-manager=exampleServerKeyManager,trust-manager=exampleTLSTrustManager,need-client-auth=true) {"outcome" => "success"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、SSL コンテキストは TLSv1.2 を使用します。次に示すとおり、TLSv1.3 を使用するように
protocol属性を設定できます。構文
/subsystem=elytron/server-ssl-context=<server-ssl-context-name>:add(key-manager=<key_manager_name>,trust-manager=<trust_manager_name>,need-client-auth=true,protocols=[TLSv1.3])
/subsystem=elytron/server-ssl-context=<server-ssl-context-name>:add(key-manager=<key_manager_name>,trust-manager=<trust_manager_name>,need-client-auth=true,protocols=[TLSv1.3])Copy to Clipboard Copied! Toggle word wrap Toggle overflow http 管理インターフェイスに使用する SSLContext への参照を追加します。
構文
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=<server_ssl_context_name>)
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=<server_ssl_context_name>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HTTPS 管理インターフェイスのソケットに使用するソケットバインディング設定を定義します。
構文
/core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=<socket_binding>)
/core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=<socket_binding>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーをリロードします。
reload ... Accept certificate? [N]o, [T]emporarily, [P]ermanently :
reload ... Accept certificate? [N]o, [T]emporarily, [P]ermanently :Copy to Clipboard Copied! Toggle word wrap Toggle overflow TまたはPを入力して、サーバーから提供された証明書を一時的または永続的に許可します。クライアント証明書が提示されることを想定しているため、管理 CLI は切断します。
検証
管理コンソールが保護されていることを確認します。
CLI を使用して確認します。
構文
curl --verbose --location --cacert <server_certificate> --cert <client_keystore>:<password> --cert-type P12 https://localhost:9993
$ curl --verbose --location --cacert <server_certificate> --cert <client_keystore>:<password> --cert-type P12 https://localhost:9993Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
curl --verbose --location --cacert server.cer --cert EAP_HOME/standalone/configuration/exampleclient.keystore.pkcs12:secret --cert-type P12 https://localhost:9993 ... < HTTP/1.1 200 OK ...
$ curl --verbose --location --cacert server.cer --cert EAP_HOME/standalone/configuration/exampleclient.keystore.pkcs12:secret --cert-type P12 https://localhost:9993 ... < HTTP/1.1 200 OK ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow ブラウザーを使用して確認します。
クライアント証明書をブラウザーにインポートします。クライアント証明書の生成 手順で作成されたサンプル証明書は
exampleclient.keystore.pkcs12と呼ばれ、それをインポートするためのサンプルパスワードはsecretです。ブラウザーへの証明書のインポートについては、ブラウザーのドキュメントを参照してください。
ブラウザーで
https://localhost:9993にアクセスします。ブラウザーは、サーバーで識別するための証明書を提示するように求めます。
ブラウザーにインポートした証明書を選択します。たとえば、
exampleclient.keystore.pkcs12です。自己署名証明書を使用する場合は、サーバーが提示した証明書が不明であるという警告がブラウザーに表示されます。
証明書を調べて、ブラウザーに表示されるフィンガープリントが、キーストアの証明書のフィンガープリントと一致することを確認します。次のコマンドを使用して、キーストアの証明書を表示できます。
構文
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=exampleServerKeyStore:read-alias(alias=localhost) ... "sha-1-digest" => "5e:3e:ad:c8:df:d7:f6:63:38:05:e2:a3:a7:31:07:82:c8:c8:94:47", "sha-256-digest" => "11:b6:8f:00:42:e1:7f:6c:16:ef:db:08:5e:13:d9:b8:16:6e:a0:3c:2e:d4:e5:fd:cb:53:90:88:d2:9c:b1:99",
/subsystem=elytron/key-store=exampleServerKeyStore:read-alias(alias=localhost) ... "sha-1-digest" => "5e:3e:ad:c8:df:d7:f6:63:38:05:e2:a3:a7:31:07:82:c8:c8:94:47", "sha-256-digest" => "11:b6:8f:00:42:e1:7f:6c:16:ef:db:08:5e:13:d9:b8:16:6e:a0:3c:2e:d4:e5:fd:cb:53:90:88:d2:9c:b1:99",Copy to Clipboard Copied! Toggle word wrap Toggle overflow
サーバー証明書を許可すると、ログイン認証情報の入力を求められます。既存 JBoss EAP ユーザーのユーザー認証情報を使用してログインできます。
管理 CLI が保護されていることを確認します。
次の内容でファイル
wildfly-config.xmlを作成します。例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記key-store-clear-password要素で、クリアテキストの代わりにマスクされたパスワードを使用して難読化できます。クライアント証明書を提示して、管理 CLI にアクセスします。
./jboss-cli.sh --controller=remote+https://127.0.0.1:9993 -Dwildfly.config.url=/path/to/wildfly-config.xml --connect
$ ./jboss-cli.sh --controller=remote+https://127.0.0.1:9993 -Dwildfly.config.url=/path/to/wildfly-config.xml --connectCopy to Clipboard Copied! Toggle word wrap Toggle overflow
両方のクライアント (クライアントの Web ブラウザーと管理 CLI) はサーバーの証明書を信頼し、サーバーは両方のクライアントを信頼します。クライアントとサーバー間の通信は SSL/TLS を介して行われます。
2.5. JBoss EAP にデプロイされたアプリケーションを SSL/TLS で保護するための server-ssl-context 設定 リンクのコピーリンクがクリップボードにコピーされました!
Elytron は、SSL/TLS の設定に使用できる applicationSSC と呼ばれるデフォルトの server-ssl-context を提供します。または、Elytron で独自の SSL コンテキストを作成できます。次の手順では、デフォルトの SSL コンテキストである applicationSSC を使用して、アプリケーションの SSL/TLS を設定する方法を説明します。
前提条件
- JBoss EAP が実行している。
クライアント証明書用のサーバートラストストアとトラストマネージャーを設定している。
詳細は、クライアント証明書用のトラストストアとトラストマネージャーの設定 を参照してください。
サーバー証明書を設定している。
詳細は、SSL/TLS 用サーバー証明書の設定 を参照してください。
手順
デフォルトのサーバー SSL コンテキストを設定して、双方向 SSL を有効にします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、SSL コンテキストは TLSv1.2 を使用します。次に示すとおり、TLSv1.3 を使用するように
protocol属性を設定できます。/subsystem=elytron/server-ssl-context=applicationSSC:write-attribute(name=protocols,value=[TLSv1.3])
/subsystem=elytron/server-ssl-context=applicationSSC:write-attribute(name=protocols,value=[TLSv1.3])Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバー SSL コンテキストのトラストマネージャーを設定します。
構文
/subsystem=elytron/server-ssl-context=applicationSSC:write-attribute(name=trust-manager,value=<server_trust_manager>)
/subsystem=elytron/server-ssl-context=applicationSSC:write-attribute(name=trust-manager,value=<server_trust_manager>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバー SSL コンテキストの鍵マネージャーを設定します。
構文
/subsystem=elytron/server-ssl-context=applicationSSC:write-attribute(name=key-manager,value=<key_manager_name>)
/subsystem=elytron/server-ssl-context=applicationSSC:write-attribute(name=key-manager,value=<key_manager_name>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーをリロードします。
reload
reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
JBoss EAP のウェルカムページにアクセスできることを確認します。
CLI を使用して確認します。
構文
curl --verbose --location --cacert <server_certificate> --cert <client_keystore>:<password> --cert-type P12 https://localhost:8443
$ curl --verbose --location --cacert <server_certificate> --cert <client_keystore>:<password> --cert-type P12 https://localhost:8443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
curl --verbose --location --cacert server.cer --cert exampleclient.keystore.pkcs12:secret --cert-type P12 https://localhost:8443 ... <h3>Your Red Hat JBoss Enterprise Application Platform is running.</h3> ...
$ curl --verbose --location --cacert server.cer --cert exampleclient.keystore.pkcs12:secret --cert-type P12 https://localhost:8443 ... <h3>Your Red Hat JBoss Enterprise Application Platform is running.</h3> ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow ブラウザーを使用して確認します。
クライアント証明書をブラウザーにインポートします。クライアント証明書の生成 手順で作成されたサンプル証明書は
exampleclient.keystore.pkcs12と呼ばれ、それをインポートするためのサンプルパスワードはsecretです。ブラウザーへの証明書のインポートについては、ブラウザーのドキュメントを参照してください。
ブラウザーで
https://localhost:8443に移動します。ブラウザーは、サーバーで識別するための証明書を提示するように求めます。
ブラウザーにインポートした証明書を選択します。たとえば、
exampleclient.keystore.pkcs12です。自己署名証明書を使用する場合は、サーバーが提示した証明書が不明であるという警告がブラウザーに表示されます。
証明書を調べて、ブラウザーに表示されるフィンガープリントが、キーストアの証明書のフィンガープリントと一致することを確認します。次のコマンドを使用して、キーストアの証明書を表示できます。
構文
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/key-store=exampleServerKeyStore:read-alias(alias=localhost) ... "sha-1-digest" => "5e:3e:ad:c8:df:d7:f6:63:38:05:e2:a3:a7:31:07:82:c8:c8:94:47", "sha-256-digest" => "11:b6:8f:00:42:e1:7f:6c:16:ef:db:08:5e:13:d9:b8:16:6e:a0:3c:2e:d4:e5:fd:cb:53:90:88:d2:9c:b1:99",
/subsystem=elytron/key-store=exampleServerKeyStore:read-alias(alias=localhost) ... "sha-1-digest" => "5e:3e:ad:c8:df:d7:f6:63:38:05:e2:a3:a7:31:07:82:c8:c8:94:47", "sha-256-digest" => "11:b6:8f:00:42:e1:7f:6c:16:ef:db:08:5e:13:d9:b8:16:6e:a0:3c:2e:d4:e5:fd:cb:53:90:88:d2:9c:b1:99",Copy to Clipboard Copied! Toggle word wrap Toggle overflow
サーバー証明書を許可すると、JBoss EAP のウェルカムページにアクセスできます。
これでアプリケーション用の双方向 SSL/TLS が設定されました。
第3章 Elytron における証明書失効チェックの設定 リンクのコピーリンクがクリップボードにコピーされました!
有効期限が切れる前に発行元の認証局 (CA) によって失効された証明書を Elytron または Elytron クライアントが信頼しないようにするには、証明書失効チェックを設定します。証明書失効チェックには、Certificate Revocation Lists (CRL) または Online Certificate Status Protocol (OCSP) レスポンダーのいずれかを使用できます。CRL 全体をダウンロードしたくない場合は、OCSP を使用します。
3.1. 証明書失効リストを使用した証明書失効チェックの設定 リンクのコピーリンクがクリップボードにコピーされました!
双方向 SSL/TLS を有効にするために使用される Elytron トラストマネージャーで証明書失効リスト (CRL) を使用して証明書失効チェックを設定し、有効期限前に発行元の認証局 (CA) によって失効された証明書を Elytron が信頼しないようにします。
前提条件
- JBoss EAP が実行している。
トラストマネージャーが設定されている。
詳細は、クライアント証明書用のトラストストアとトラストマネージャーの設定 を参照してください。
手順
次のいずれかの手順を使用して、CRL を使用するようにトラストマネージャーを設定します。
トラストマネージャーが、証明書で参照されるディストリビューションポイントから取得した CRL を使用するように設定します。
構文
/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=certificate-revocation-lists,value=[])
/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=certificate-revocation-lists,value=[])Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=certificate-revocation-lists,value=[])
/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=certificate-revocation-lists,value=[])Copy to Clipboard Copied! Toggle word wrap Toggle overflow 証明書で参照されているディストリビューションポイントから取得した CRL を上書きします。
構文
/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=certificate-revocation-lists,value=[{path="<CRL-file-1>"},{path="<CRL-file-2>"},...,{path="<CRL-file-N>"}])/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=certificate-revocation-lists,value=[{path="<CRL-file-1>"},{path="<CRL-file-2>"},...,{path="<CRL-file-N>"}])Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=certificate-revocation-lists,value=[{path="intermediate.crl.pem"}])/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=certificate-revocation-lists,value=[{path="intermediate.crl.pem"}])Copy to Clipboard Copied! Toggle word wrap Toggle overflow
証明書失効チェックに CRL を使用するようにトラストマネージャーを設定します。
OCSP レスポンダーも証明書失効チェック用に設定されている場合は、トラストマネージャーで
ocsp.prefer-crls属性の値trueを追加し、証明書失効チェックに CRL を使用します。構文
/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=ocsp.prefer-crls,value="true")
/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=ocsp.prefer-crls,value="true")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=ocsp.prefer-crls,value="true")
/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=ocsp.prefer-crls,value="true")Copy to Clipboard Copied! Toggle word wrap Toggle overflow - OCSP レスポンダーが証明書失効チェック用に設定されていない場合、設定は完了です。
3.2. Elytron における OCSP を使用した証明書失効チェックの設定 リンクのコピーリンクがクリップボードにコピーされました!
双方向 SSL/TLS が証明書失効リストに Online Certificate Status Protocol (OCSP) レスポンダーを使用するために使用されるトラストマネージャーを設定します。OCSP は RFC6960 で定義されています。
OCSP レスポンダーと CRL の両方が証明書失効チェック用に設定されている場合は、デフォルトで OCSP レスポンダーが呼び出されます。
前提条件
- JBoss EAP が実行している。
トラストマネージャーが設定されている。
詳細は、クライアント証明書用のトラストストアとトラストマネージャーの設定 を参照してください。
手順
次のいずれかの手順で、OCSP による証明書失効に使用するトラストマネージャーを設定します。
証明書失効チェックに、証明書で定義された OCSP レスポンダーを使用するようにトラストマネージャーを設定します。
構文
/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=ocsp,value={})/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=ocsp,value={})Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=ocsp,value={})/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=ocsp,value={})Copy to Clipboard Copied! Toggle word wrap Toggle overflow 証明書で定義された OCSP レスポンダーを上書きします。
構文
/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=ocsp.responder,value="<ocsp_responeder_url>")
/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=ocsp.responder,value="<ocsp_responeder_url>")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=ocsp.responder,value="http://example.com/ocsp-responder")
/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=ocsp.responder,value="http://example.com/ocsp-responder")Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3. Elytron クライアントにおける CRL を使用した証明書失効チェックの設定 リンクのコピーリンクがクリップボードにコピーされました!
Elytron クライアントで証明書失効リスト (CRL) を使用して証明書失効チェックを設定し、有効期限前に発行元の認証局 (CA) が失効した証明書をクライアントが信頼しないようにします。
前提条件
-
Elytron クライアント用の
wildfly-config.xmlファイルを作成しました。
手順
wildfly-config.xmlファイルの<ssl-context>要素に次のコンテンツを追加します。構文
<certificate-revocation-lists> <certificate-revocation-list path="${path_to_crl}"/> </certificate-revocation-lists><certificate-revocation-lists> <certificate-revocation-list path="${path_to_crl}"/> </certificate-revocation-lists>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
<certificate-revocation-lists> <certificate-revocation-list path="/server/ca/crl/revoked.pem"/> </certificate-revocation-lists><certificate-revocation-lists> <certificate-revocation-list path="/server/ca/crl/revoked.pem"/> </certificate-revocation-lists>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4. Elytron クライアントにおける OCSP を使用した証明書失効チェックの設定 リンクのコピーリンクがクリップボードにコピーされました!
Elytron クライアントで Online Certificate Status Protocol (OCSP) を使用して証明書失効チェックを設定し、有効期限前に発行元の認証局 (CA) が失効した証明書をクライアントが信頼しないようにします。OCSP レスポンダーを使用する場合、CRL 全体をダウンロードする必要はありません。
前提条件
-
Elytron クライアント用の
wildfly-config.xmlファイルを作成しました。
手順
wildfly-config.xml の
<ssl-context>要素に次のコンテンツを追加します。構文
<ocsp responder="${ocsp_responder_uri}" responder-certificate=”${alias_of_ocsp_responder_certificate}” responder-keystore=”${keystore_for_ocsp_responder_certificate}” /><ocsp responder="${ocsp_responder_uri}" responder-certificate=”${alias_of_ocsp_responder_certificate}” responder-keystore=”${keystore_for_ocsp_responder_certificate}” />Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
<ocsp />
<ocsp />Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第4章 Elytron クライアントのデフォルト SSLcontext セキュリティープロバイダーを JBoss EAP クライアントで使用する リンクのコピーリンクがクリップボードにコピーされました!
Java 仮想マシン (JVM) が、Elytron クライアント設定を使用してデフォルトの SSLcontext を提供するようにするには、WildFlyElytronClientDefaultSSLContextProvider を使用できます。このプロバイダーを使用して、デフォルトの SSLContext を要求する際に、クライアントライブラリーが Elytron クライアント設定を自動的に使用するようにします。
4.1. Elytron クライアントのデフォルト SSL コンテキストセキュリティープロバイダー リンクのコピーリンクがクリップボードにコピーされました!
Elytron クライアントは、Java 仮想マシン (JVM) 全体のデフォルト SSL コンテキストの登録に使用できる Java セキュリティープロバイダー org.wildfly.security.auth.client.WildFlyElytronClientDefaultSSLContextProvider を提供します。
WildFlyElytronClientDefaultSSLContextProvider プロバイダーは以下のように動作します。
プロバイダーは、
SSLContext.getDefault()メソッドが呼び出されると、SSLContextをインスタンス化します。SSLContextは、以下のいずれかの場所から取得された認証コンテキストから開始します。- プロバイダーへの引数として渡された Elytron クライアント設定ファイル。
ファイルシステム上で自動的に検出された
wildfly-config.xmlファイル。詳細は、デフォルト設定アプローチ を参照してください。プロバイダーに引数として渡されるクライアント設定ファイルが優先されます。
SSLContext.getDefault()メソッドが呼び出されると、JVM はプロバイダーによってインスタンス化されたSSLContextを返します。Elytron クライアントには複数の SSL コンテキストを設定できるため、ルールを使用し、接続用に単一の SSL コンテキストを選択します。デフォルトの SSL コンテキストは、すべてのルールに一致するものです。このプロバイダーは、このデフォルトの SSL コンテキストを返します。
デフォルトの SSLContext が設定されていないか、設定が存在しない場合は、プロバイダーが無視されます。
WildFlyElytronClientDefaultSSLContextProvider プロバイダーを登録すると、SSLContext.getDefault() メソッドを使用するすべてのクライアントライブラリーは、コードで Elytron クライアント API を使用せずに Elytron クライアント設定を使用します。
プロバイダーを登録するには、以下のアーティファクトにランタイム依存関係を追加する必要があります。
-
wildfly-elytron-client -
wildfly-client-config
プロバイダーは、プログラムを用いて、クライアントコードに、または java.security ファイルに静的に登録できます。登録して使用するプロバイダーを動的に決定する場合は、プログラムによる登録を使用します。
プロバイダーのプログラムでの登録
以下に示すように、プロバイダーをクライアントコードにプログラムで登録できます。
Security.insertProviderAt(new WildFlyElytronClientDefaultSSLContextProvider(CONFIG_FILE_PATH), 1);
Security.insertProviderAt(new WildFlyElytronClientDefaultSSLContextProvider(CONFIG_FILE_PATH), 1);
プロバイダーの静的登録
以下に示すように、プロバイダーを java.security ファイルに登録できます。
security.provider.1=org.wildfly.security.auth.client.WildFlyElytronClientDefaultSSLContextProvider <CONFIG_FILE_PATH>
security.provider.1=org.wildfly.security.auth.client.WildFlyElytronClientDefaultSSLContextProvider <CONFIG_FILE_PATH>
4.2. デフォルトの SSL コンテキストをロードするクライアントの作成例 リンクのコピーリンクがクリップボードにコピーされました!
以下の例は、WildFlyElytronClientDefaultSSLContextProvider プロバイダーをプログラムで登録し、SSLContext.getDefault() メソッドを使用して Elytron クライアントによって初期化された SSLContext を取得する方法を示しています。この例では、プロバイダーへの引数として提供された静的クライアント設定を使用します。
4.2.1. JBoss EAP クライアントの Maven プロジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP にデプロイされたアプリケーションのクライアントを作成するには、必要な依存関係とディレクトリー構造で Maven プロジェクトを作成します。
前提条件
- Maven がインストールされている。詳細は、Downloading Apache Maven を参照してください。
手順
mvnコマンドを使用して Maven プロジェクトをセットアップします。このコマンドは、プロジェクトのディレクトリー構造とpom.xml設定ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションのルートディレクトリーに移動します。
cd client-ssl-context
$ cd client-ssl-contextCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成された
pom.xmlファイルの内容を、以下のテキストに置き換えます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow src/testディレクトリーを削除します。rm -rf src/test/
$ rm -rf src/test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
アプリケーションのルートディレクトリーで、次のコマンドを入力します。
mvn install
$ mvn installCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のような出力が得られます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.2. デフォルトの SSLContext をロードするクライアントの作成 リンクのコピーリンクがクリップボードにコピーされました!
SSLContext.getDefault() メソッドを使用して SSLContext をロードする JBoss EAP にデプロイされたアプリケーションのクライアントを作成します。
この手順では、<application_home> は、アプリケーションの pom.xml 設定ファイルが含まれるディレクトリーを参照します。
前提条件
双方向 TLS で JBoss EAP にデプロイされたアプリケーションを保護している。
これを実行するには、以下の手順を実行します。
Maven プロジェクトを作成している。
詳細は、JBoss EAP クライアントの Maven プロジェクトの作成 を参照してください。
- JBoss EAP が実行している。
手順
Java ファイルを保存するディレクトリーを作成します。
mkdir -p <application_home>/src/main/java/com/example/client
$ mkdir -p <application_home>/src/main/java/com/example/clientCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいディレクトリーに移動します。
cd <application_home>/src/main/java/com/example/client
$ cd <application_home>/src/main/java/com/example/clientCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の内容で Java ファイル
App.javaを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- JBoss EAP ホームページの URL を定義します。
- 2
- セキュリティープロバイダーを登録します。
1は、このプロバイダーの優先度を定義します。プロバイダーを静的に登録するには、代わりにjava.securityファイルにsecurity.provider.1=org.wildfly.security.auth.client.WildFlyElytronClientDefaultSSLContextProvider <PATH>/<TO>/wildfly-config-two-way-tls.xmlのようにプロバイダーを追加できます。 - 3
- デフォルトの SSL コンテキストを取得します。
<application_home>/srcディレクトリーに、"wildfly-config-two-way-tls.xml" というクライアント設定ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のプレースホルダーの値を、実際のパスに置き換えます。
- ${path_to_client_truststore}
- ${path_to_client_keystore}
検証
- <application_home> ディレクトリーに移動します。
アプリケーションを実行します。
mvn compile exec:java
$ mvn compile exec:javaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
INFO: ELY00001: WildFly Elytron version 2.0.0.Final-redhat-00001 SSL Default SSLContext is: WildFlyElytronClientDefaultSSLContextProvider
INFO: ELY00001: WildFly Elytron version 2.0.0.Final-redhat-00001 SSL Default SSLContext is: WildFlyElytronClientDefaultSSLContextProviderCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第5章 参照 リンクのコピーリンクがクリップボードにコピーされました!
5.1. key-manager 属性 リンクのコピーリンクがクリップボードにコピーされました!
属性を設定することで、key-manager を設定できます。
| 属性 | 説明 |
|---|---|
| algorithm |
基礎となる |
| alias-filter | キーストアから返されるエイリアスに適用するフィルター。これは、返すエイリアスのコンマ区切りのリストまたは次のいずれかの形式で指定できます。
|
| credential-reference |
キーストア項目を復号化するための認証情報リファレンス。これはクリアテキストで、または |
| generate-self-signed-certificate-host | キーストアをサポートするファイルが存在せず、この属性が設定されている場合は、指定されたホスト名に対して自己署名証明書が生成されます。実稼働環境ではこの属性を設定しないでください。 |
| key-store |
基礎となる |
| provider-name |
基礎となる |
| providers |
基礎となる |
5.2. key-store 属性 リンクのコピーリンクがクリップボードにコピーされました!
属性を設定することにより、key-store を設定できます。
| 属性 | 説明 |
|---|---|
| alias-filter | キーストアから返されるエイリアスに適用するフィルターは、返すエイリアスのコンマ区切りリストまたは以下の形式のいずれかになります。
注記
|
| credential-reference |
キーストアへのアクセスに使用するパスワード。これはクリアテキストで、または |
| path | キーストアファイルへのパス。 |
| provider-name | キーストアのロードに使用するプロバイダーの名前。この属性を設定すると、指定されたタイプのキーストアを作成できる最初のプロバイダーの検索が無効になります。 |
| providers | 検索するプロバイダーインスタンスのリストを取得するために使用されるプロバイダーへの参照。指定しない場合は、代わりにプロバイダーのグローバルリストが使用されます。 |
| relative-to |
このストアが相対するベースパス。完全パスまたは |
| required |
|
| type |
注記 次のキーストアタイプが自動的に検出されます。
その他のキーストアタイプは手動で指定する必要があります。 キーストアタイプの完全なリストは、Oracle JDK ドキュメントの Java Cryptography Architecture Standard Algorithm Name Documentation for JDK 11 にあります。 |
5.3. server-ssl-context 属性 リンクのコピーリンクがクリップボードにコピーされました!
属性を設定することで、サーバー SSL コンテキスト (server-ssl-context) を設定できます。
| 属性 | 説明 |
|---|---|
| authentication-optional |
|
| cipher-suite-filter |
有効な暗号スイートを指定するために適用するフィルター。このフィルターは、コロン、コンマ、またはスペースで区切られた項目のリストを取得します。各項目は、OpenSSL 形式の暗号スイート名、標準の SSL/TLS 暗号スイート名、または |
| cipher-suite-names | TLSv1.3 の有効な暗号スイートを指定するために適用するフィルター。 |
| final-principal-transformer | このメカニズムレルムに適用する最終のプリンシパルトランスフォーマー。 |
| key-manager |
|
| maximum-session-cache-size | キャッシュされる SSL/TLS セッションの最大数。 |
| need-client-auth |
|
| post-realm-principal-transformer | レルムの選択後に適用するプリンシパルトランスフォーマー。 |
| pre-realm-principal-transformer | レルムが選択される前に適用するプリンシパルトランスフォーマー。 |
| protocols | 有効なプロトコル。許可されているオプションは以下のとおりです。
これは、デフォルトで 警告 SSLv2、SSLv3、TLSv1.0 の代わりに、TLSv1.2 または TLSv1.3 を使用します。SSLv2、SSLv3、または TLSv1.0 を使用するとセキュリティー上のリスクが生じるため、明示的に無効にする必要があります。
プロトコルを指定しない場合は、 |
| provider-name |
使用するプロバイダーの名前。指定されていない場合は、プロバイダーからの |
| providers |
|
| realm-mapper | SSL/TLS 認証に使用されるレルムマッパー。 |
| security-domain | SSL/TLS セッション確立中の認証に使用するセキュリティードメイン。 |
| session-timeout | SSL セッションのタイムアウト (秒単位)。
値
値
デフォルト値は |
| trust-manager |
SSLContext 内で使用する |
| use-cipher-suites-order |
|
| want-client-auth |
|
| wrap |
|
server-ssl-context の realm-mapper 属性および principal-transformer 属性は、証明書がトラストマネージャーによって検証される SASL EXTERNAL メカニズムにのみ適用されます。HTTP CLIENT-CERT 認証設定は、http-authentication-factory で設定されます。
5.4. trust-manager 属性 リンクのコピーリンクがクリップボードにコピーされました!
属性を設定することで、トラストマネージャー (trust-manager) を設定できます。
| 属性 | 説明 |
|---|---|
| algorithm |
基礎となる |
| alias-filter | key-store から返されたエイリアスに適用するフィルター。これは、返すエイリアスのコンマ区切りのリストまたは次のいずれかの形式で指定できます。
|
| certificate-revocation-list |
トラストマネージャーで証明書失効リストのチェックを有効にします。この属性を使用して定義できる CRL パスは 1 つだけです。複数の CRL パスを定義するには、
|
| certificate-revocation-lists |
複数の証明書失効リストを使用して、トラストマネージャーで証明書失効リストチェックを有効にします。
|
| key-store |
基礎となる |
| maximum-cert-path |
証明書パスに存在可能な自己発行でない中間証明書の最大数。デフォルト値は
この属性は、JBoss EAP 7.3 では、 注記
|
| ocsp |
トラストマネージャーでのオンライン証明書ステータスプロトコル (OCSP) チェックを有効にします。
|
| only-leaf-cert |
リーフ証明書のみの失効ステータスを確認します。これは任意の属性です。デフォルト値は |
| provider-name |
基礎となる |
| providers |
基礎となる |