第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 を手動で有効にするために必要なリソースを設定します。リソースを手動で設定すると、サーバー設定をより詳細に制御できます。