1.2. 管理インターフェイスのセキュア化の方法
ここでは、JBoss EAP 管理インターフェイスと関連サブシステムのセキュア化に関連するさまざまな操作を実行する方法を説明します。
ここで使用する管理 CLI コマンドは、JBoss EAP スタンドアロンサーバーを実行していることを仮定しています。JBoss EAP 管理対象ドメインの管理 CLI を使用する場合の詳細は 管理 CLI ガイド を参照してください。
管理 CLI との Elytron の統合
管理インターフェイスは、レガシーセキュリティーレルムの場合と同様に、elytron
サブシステムのリソースを使用して保護できます。
接続の SSL 設定は、以下の場所のいずれかから取得されます。
- CLI 固有の設定内の SSL 設定。
- サーバー証明書を受け入れるようにユーザーに自動的にプロンプトするデフォルトの SSL 設定。
- java システムプロパティー。
クライアント設定は、wildfly-config.xml
ファイルを使用して変更できます。
-Dwildfly.config.url
プロパティーを設定する場合は、すべてのファイルをクライアントの設定に使用できます。
1.2.1. ネットワークおよびポートの設定
ホストの設定に応じて、JBoss EAP はさまざまなネットワークインターフェイスおよびポートを使用するように設定できます。これにより、JBoss EAP はさまざまなホスト、ネットワーク、およびファイアウォール要件で使用できます。
関連情報
- JBoss EAP で使用されるネットワークおよびポートや設定方法の詳細は、JBoss EAP設定ガイド の ネットワークおよびポート設定 を参照してください。
1.2.2. 管理コンソールの無効化
JBoss Operations Network などの他のクライアントは、JBoss EAP の管理に HTTP インターフェイスを使用して動作します。これらのサービスの使用を継続するには、Web ベースの管理コンソール自体を無効にしてください。これは、console-enabled
属性を false
に設定すると実行できます。
手順
JBoss EAP の Web ベースの管理コンソールを無効にするには、次の手順に従います。
/core-service=management/management-interface=http-interface/:write-attribute(name=console-enabled,value=false)
1.2.3. JMX へのリモートアクセスの無効化
jmx
サブシステムへのリモートアクセスにより、JDK とアプリケーション管理操作がリモートでトリガーできます。
手順
JBoss EAP で JMX へのリモートアクセスを無効にするには、
jmx
サブシステムのリモーティングコネクターを削除します。/subsystem=jmx/remoting-connector=jmx/:remove
1.2.4. サイレント認証
JBoss EAP のデフォルトインストールには、ローカル管理 CLI ユーザーのサイレント認証メソッドが含まれています。これにより、ローカルユーザーは、ユーザー名またはパスワード認証なしで管理 CLI にアクセスできます。この機能を有効にすると、ローカルユーザーが認証なしに管理 CLI スクリプトを実行できるようになります。通常、ユーザーがローカル設定にアクセスできれば、独自のユーザー詳細を追加することもできるため便利な機能と見なされます。
より高度なセキュリティー管理が必要な場合は、サイレント認証を無効にできます。これは、設定ファイルの security-realm
属性内の local 要素を削除することによって実現できます。これは、スタンドアロンインスタンスとマネージドドメインの両方が対象となります。
local 要素の削除は、JBoss EAP インスタンスの影響と、その設定を完全に理解している場合にのみ行う必要があります。
手順
elytron
サブシステムの使用時にサイレント認証を削除するには、以下の手順に従います。[standalone@localhost:9990 /] /subsystem=elytron/sasl-authentication-factory=managenet-sasl-authentication:read-resource { "outcome" => "success", "result" => { "mechanism-configurations" => [ { "mechanism-name" => "JBOSS-LOCAL-USER", "realm-mapper" => "local" }, { "mechanism-name" => "DIGEST-MD5", "mechanism-realm-configurations" => [{"realm-name" => "ManagementRealm"}] } ], "sasl-server-factory" => "configured", "security-domain" => "ManagementDomain" } } [standalone@localhost:9990 /] /subsystem=elytron/sasl-authentication-factory=managenet-sasl-authentication:list-remove(name=mechanism-configurations, index=0) [standalone@localhost:9990 /] reload
レガシーセキュリティーレルムの使用時にサイレント認証を削除するには、以下を行います。
/core-service=management/security-realm=<realm_name>/authentication=local:remove
1.2.5. Elytron サブシステムを使用して管理インターフェイスに対して一方向 SSL/TLS
JBoss EAP では、JBoss EAP 管理 CLI または管理コンソールを使用して管理インターフェイスの一方向 SSL/TLS を有効にできます。
管理 CLI では、一方向の SSL/TLS を以下の方法で有効にできます。
- セキュリティーコマンド の使用
-
elytron
サブシステムコマンド の使用
マネージメントコンソールでは、以下の方法で一方向 SSL/TLS を有効できます。
- 管理コンソール の使用
1.2.5.1. Security コマンドを使用した一方向 SSL/TLS の有効化
security enable-ssl-management
コマンドを使用すると、管理インターフェイスに一方向 SSL/TLS を有効にできます。
手順
CLI で
security enable-ssl-management --interactive
コマンドを入力します。例
security enable-ssl-management --interactive Please provide required pieces of information to enable SSL: Key-store file name (default management.keystore): keystore.jks Password (blank generated): secret What is your first and last name? [Unknown]: localhost What is the name of your organizational unit? [Unknown]: What is the name of your organization? [Unknown]: What is the name of your City or Locality? [Unknown]: What is the name of your State or Province? [Unknown]: What is the two-letter country code for this unit? [Unknown]: Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct y/n [y]? Validity (in days, blank default): 365 Alias (blank generated): localhost Enable SSL Mutual Authentication y/n (blank n): n SSL options: key store file: keystore.jks distinguished name: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown password: secret validity: 365 alias: localhost Server keystore file keystore.jks, certificate file keystore.pem and keystore.csr file will be generated in server configuration directory. Do you confirm y/n :y
- コマンドを実行すると、管理 CLI がサーバーを再読み込みし、そのサーバーに再接続します。
disable-ssl-management
コマンドを使用して、管理インターフェイスの一方向 SSL/TLS を無効にできます。security disable-ssl-management
このコマンドでは、Elytron リソースは削除されません。SSL 設定に
ApplicationRealm
レガシーセキュリティーレルムを使用するようにシステムを設定します。
1.2.5.2. Elytron サブシステムのコマンドを使用した一方向 SSL/TLS の有効化
Elytron サブシステムでの管理インターフェイスに対する一方向 SSL/TLS の有効化
手順
key-store
を設定します。/subsystem=elytron/key-store=httpsKS:add(path=keystore.jks,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=JKS)
注記上記のコマンドは、
relative-to
を使用してキーストアファイルの場所を参照します。または、path
のキーストアにフルパスを指定することで、relative-to
を省略できます。キーストアファイルが存在しない場合は、以下のコマンドを使用してサンプルキーペアを生成できます。
/subsystem=elytron/key-store=httpsKS:generate-key-pair(alias=localhost,algorithm=RSA,key-size=1024,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost") /subsystem=elytron/key-store=httpsKS:store()
key-manager
およびserver-ssl-context
を作成します。/subsystem=elytron/key-manager=httpsKM:add(key-store=httpsKS,credential-reference={clear-text=secret}) /subsystem=elytron/server-ssl-context=httpsSSC:add(key-manager=httpsKM,protocols=["TLSv1.2"])
重要Elytron サブシステムはデフォルトで
KeyManagerFactory.getDefaultAlgorithm()
を使用してアルゴリズムを決定するため、Red Hat は前のコマンドでアルゴリズム属性を指定しませんでした。ただし、アルゴリズム属性は指定できます。アルゴリズム属性を指定するには、使用している JDK によるキーマネージャーアルゴリズムを知る必要があります。たとえば、SunJSSE を使用する JDK は、PKIX
およびSunX509
アルゴリズムを提供します。前のコマンドでは、
SunX509
をキーマネージャーアルゴリズム属性として指定できます。また、使用する HTTPS プロトコルを決定する必要もあります。上記のコマンド例は
TLSv1.2
を使用します。cipher-suite-filter
を使用して暗号スイートを指定し、use-cipher-suites-order
引数を使用してサーバーの暗号スイートの順序を優先できます。use-cipher-suites-order
属性はデフォルトでtrue
に設定されます。これは、レガシーsecurity
サブシステムの動作とは異なります。その動作は、デフォルトで、クライアント暗号スイートの順序を許可します。管理インターフェイスで HTTPS を有効にします。
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=httpsSSC) /core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)
JBoss EAP インスタンスをリロードします。
reload
一方向 SSL/TLS が管理インターフェイスに対して有効化されるようになりました。
security-realm
と ssl-context
の 両方 が定義されている場合、JBoss EAP は ssl-context
によって提供される SSL / TLS 設定を使用します。
1.2.5.3. 管理コンソールを使った一方向 SSL/TLS の有効化
管理コンソールで使用する管理インターフェイスに対して SSL を有効にするには、管理コンソールの SSL ウィザードを使用します。
手順
- 管理コンソールにアクセスします。詳細は、JBoss EAP設定ガイド の 管理コンソール を参照してください。
- Runtime に移動して、該当するサーバー名をクリックします。
- サーバー名の横にある 表示 をクリックします。
- HTTP Manageme… をクリックし、HTTP Management Interface 設定ページを開きます。
Enable SSL をクリックしてウィザードを起動します。
このウィザードでは、以下のシナリオで、SSL を有効にする方法を順を追ってガイドします。
- 証明書ストアを作成し、自己署名証明書を生成する。
- Let's Encrypt 認証局から証明書を取得したい。
- 証明書ストアはすでにファイルシステムにあるが、キーストアの設定がない。
- 有効な証明書ストアを使用するキーストアの設定が存在する。
ウィザードを使用すると、任意で相互認証のトラストストアを作成できます。
1.2.6. Elytron サブシステムを使用した管理インターフェイスに対する双方向 SSL/TLS の有効化
JBoss EAP では、管理インターフェイスの双方向 SSL/TLS は、security コマンドまたは elytron
サブシステムコマンドのいずれかを使用して有効にできます。
双方向 SSL/TLS を有効にするには、クライアント証明書を取得または生成する必要があります。クライアント証明書を生成するには、以下の手順で行います。
その後、以下のいずれかの方法で管理インターフェイスの双方向 SSL/TLS を有効にします。
1.2.6.1. クライアント証明書の生成
クライアント証明書は、CLI の keytool コマンドを使用して生成できます。
手順
クライアント証明書を作成します。
$ keytool -genkeypair -alias client -keyalg RSA -keysize 1024 -validity 365 -keystore client.keystore.jks -dname "CN=client" -keypass secret -storepass secret
クライアント証明書をエクスポートします。
$ keytool -exportcert -keystore client.keystore.jks -alias client -keypass secret -storepass secret -file /path/to/client.cer
1.2.6.2. セキュリティーコマンドによる双方向 SSL/TLS の有効化
security enable-ssl-management
コマンドを使用すると、管理インターフェイスに双方向 SSL/TLS を有効にできます。
以下の例では、信頼チェーンが存在しないので、証明書は検証されません。信頼された証明書を使用している場合、クライアントの証明書は問題なく検証できます。
前提条件
- クライアントのキーストアを設定している。
サーバーのトラストストア用の証明書をエクスポートしている。
詳しくは、クライアント証明書の生成 をご覧ください。
手順
CLI で
security enable-ssl-management --interactive
コマンドを入力します。例
security enable-ssl-management --interactive Please provide required pieces of information to enable SSL: Key-store file name (default management.keystore): server.keystore.jks Password (blank generated): secret What is your first and last name? [Unknown]: localhost What is the name of your organizational unit? [Unknown]: What is the name of your organization? [Unknown]: What is the name of your City or Locality? [Unknown]: What is the name of your State or Province? [Unknown]: What is the two-letter country code for this unit? [Unknown]: Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct y/n [y]? Validity (in days, blank default): 365 Alias (blank generated): localhost Enable SSL Mutual Authentication y/n (blank n): y Client certificate (path to pem file): /path/to/client.cer Validate certificate y/n (blank y): n Trust-store file name (management.truststore): server.truststore.jks Password (blank generated): secret SSL options: key store file: server.keystore.jks distinguished name: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown password: secret validity: 365 alias: localhost client certificate: /path/to/client.cer trust store file: server.trustore.jks trust store password: secret Server keystore file server.keystore.jks, certificate file server.pem and server.csr file will be generated in server configuration directory. Server truststore file server.trustore.jks will be generated in server configuration directory. Do you confirm y/n: y
注記コマンドを実行すると、管理 CLI がサーバーを再読み込みし、そのサーバーへの再接続を試みます。
双方向 SSL/TLS 認証を完了するには、サーバーの証明書をクライアントトラストストアにインポートし、クライアント証明書を表示するようにクライアントを設定する必要があります。
disable-ssl-management
コマンドを使用して、管理インターフェイスの双方向 SSL/TLS を無効にできます。security disable-ssl-management
このコマンドでは、Elytron リソースは削除されません。SSL 設定に
ApplicationRealm
レガシーセキュリティーレルムを使用するようにシステムを設定します。
1.2.6.3. Elytron サブシステムのコマンドを使用した双方向 SSL/TLS の有効化
elytron
サブシステムのコマンドを使用して、管理インターフェイスの双方向 SSL/TLS を有効にすることができます。
前提条件
サーバーのトラストストア用の証明書をエクスポートしている。
詳しくは、クライアント証明書の生成 をご覧ください。
手順
キーストアを取得または生成します。
JBoss EAP で一方向 SSL/TLS を有効にするには、使用する予定のキーストア、トラストストア、および証明書を取得または生成する必要があります。キーストア、トラストストア、および証明書の一連のサンプルを生成するには、以下のコマンドを使用します。
key-store
を設定します。/subsystem=elytron/key-store=twoWayKS:add(path=server.keystore.jks,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=JKS) /subsystem=elytron/key-store=twoWayKS:generate-key-pair(alias=localhost,algorithm=RSA,key-size=1024,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost") /subsystem=elytron/key-store=twoWayKS:store()
注記上記のコマンドは、
relative-to
を使用してキーストアファイルの場所を参照します。または、path
のキーストアにフルパスを指定することで、relative-to
を省略できます。サーバー証明書をエクスポートします。
/subsystem=elytron/key-store=twoWayKS:export-certificate(alias=localhost,path=/path/to/server.cer,pem=true)
サーバートラストストアの
key-store
を作成し、クライアント証明書をサーバートラストストアにインポートします。注記以下の例では、信頼チェーンが存在しないので、証明書は検証されません。信頼された証明書を使用している場合、クライアントの証明書は問題なく検証できます。
/subsystem=elytron/key-store=twoWayTS:add(path=server.truststore.jks,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=JKS) /subsystem=elytron/key-store=twoWayTS:import-certificate(alias=client,path=/path/to/client.cer,credential-reference={clear-text=secret},trust-cacerts=true,validate=false) /subsystem=elytron/key-store=twoWayTS:store()
サーバーキーストアおよびトラストストアの
key-manager
、trust-manager
、およびserver-ssl-context
を設定します。/subsystem=elytron/key-manager=twoWayKM:add(key-store=twoWayKS,credential-reference={clear-text=secret}) /subsystem=elytron/trust-manager=twoWayTM:add(key-store=twoWayTS) /subsystem=elytron/server-ssl-context=twoWaySSC:add(key-manager=twoWayKM,protocols=["TLSv1.2"],trust-manager=twoWayTM,want-client-auth=true,need-client-auth=true)
重要Elytron サブシステムはデフォルトで
KeyManagerFactory.getDefaultAlgorithm()
およびTrustManagerFactory.getDefaultAlgorithm()
を使用してアルゴリズムを決定するため、Red Hat は前のコマンドでアルゴリズム属性を指定しませんでした。ただし、アルゴリズム属性は指定できます。アルゴリズム属性を指定するには、使用している JDK によるキーマネージャーアルゴリズムを知る必要があります。たとえば、SunJSSE を使用する JDK は、PKIX
およびSunX509
アルゴリズムを提供します。前のコマンドでは、
SunX509
をキーマネージャーアルゴリズム属性として指定し、PKIX
をトラストマネージャーアルゴリズム属性として指定できます。また、使用する HTTPS プロトコルを決定する必要もあります。上記のコマンド例は
TLSv1.2
を使用します。cipher-suite-filter
を使用して暗号スイートを指定し、use-cipher-suites-order
引数を使用してサーバーの暗号スイートの順序を優先できます。use-cipher-suites-order
属性はデフォルトでtrue
に設定されます。これは、レガシーsecurity
サブシステムの動作とは異なります。その動作は、デフォルトで、クライアント暗号スイートの順序を許可します。管理インターフェイスで HTTPS を有効にします。
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=twoWaySSC) /core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)
JBoss EAP インスタンスをリロードします。
reload
注記双方向 SSL/TLS 認証を完了するには、サーバーの証明書をクライアントトラストストアにインポートし、クライアント証明書を表示するようにクライアントを設定する必要があります。
クライアント証明書を使用するようにクライアントを設定します。
双方向 SSL / TLS 認証を完了するには、信頼されたクライアント証明書をサーバーに提示するようにクライアントを設定する必要があります。たとえば、ブラウザーを使用している場合は、信頼された証明書をブラウザーの信頼ストアにインポートする必要があります。
これにより、サーバー管理への元の認証を変更せずに、双方向 SSL/TLS 認証を強制できます。
元の認証方法を変更する場合は、JBoss EAP アイデンティティー管理の設定方法 の 証明書による認証設定 を参照してください。
これで、双方向 SSL/TLS が管理インターフェイスに対して有効化されるようになります。
security-realm
と ssl-context
の 両方 が定義されている場合、JBoss EAP は ssl-context
によって提供される SSL / TLS 設定を使用します。
1.2.7. CLI セキュリティーコマンドを使用した管理インターフェイスの SASL 認証
CLI の security
コマンドを使用して、管理インターフェイスの SASL 認証を有効または無効にすることができます。このコマンドを使用して、SASL メカニズムを並べ替えることもできます。
SASL 認証の有効化
JBoss EAP では、elytron SASL 認証ファクトリーを使用した SASL 認証は security enable-sasl-management
コマンドで管理インターフェイスに対して有効にできます。このコマンドは、認証の設定に必要で存在しないリソースをすべて作成します。このコマンドはデフォルトで、含まれる SASL ファクトリーと http-interface
を関連付けます。
例: SASL 認証の有効化
security enable-sasl-management Server reloaded. Command success. Authentication configured for management http-interface sasl authentication-factory=management-sasl-authentication security-domain=ManagementDomain
コマンドを実行すると、管理 CLI がサーバーを再読み込みし、そのサーバーに再接続します。
SASL ファクトリーがすでに存在する場合、ファクトリーは --mechanism
引数によって定義されたメカニズムを使用するように更新されます。
引数の一覧は、Authorization Security Arguments を参照してください。
SASL 認証の無効化
アクティブな SASL 認証ファクトリーを削除するには、以下のコマンドを使用します。
security disable-sasl-management
または、以下のコマンドを使用して、アクティブな SASL 認証ファクトリーから特定のメカニズムを削除できます。
security disable-sasl-management --mechanism=MECHANISM
SASL メカニズムの順序変更
定義された SASL メカニズムの順序により、サーバーがリクエストを認証する方法が決まり、最初に一致したメカニズムがクライアントに送信されます。
この順序を変更するには、以下のように、security reorder-sasl-management
コマンドにコンマで区切ったものを渡します。
security reorder-sasl-management --mechanisms-order=MECHANISM1,MECHANISM2,...
関連情報
1.2.8. CLI セキュリティーコマンドを使用した管理インターフェイスの HTTP 認証の有効化
CLI の security
コマンドを使用して、管理インターフェイスの HTTP 認証を有効または無効にすることができます。
HTTP 認証の有効化
JBoss EAP では、elytron HTTP 認証ファクトリーを使用した HTTP 認証は security enable-http-auth-management
コマンドで管理インターフェイスに対して有効にできます。このコマンドは、http-interface
のみを対象とすることができます。追加の引数なしでは、含まれる HTTP 認証ファクトリーをがこのインターフェイスに関連付けられます。
例: HTTP 認証の有効化
security enable-http-auth-management Server reloaded. Command success. Authentication configured for management http-interface http authentication-factory=management-http-authentication security-domain=ManagementDomain
コマンドを実行すると、管理 CLI がサーバーを再読み込みし、そのサーバーに再接続します。
HTTP ファクトリーがすでに存在する場合、ファクトリーは --mechanism
引数によって定義されたメカニズムを使用するように更新されます。
引数の一覧は、Authorization Security Arguments を参照してください。
HTTP 認証の無効化
アクティブな HTTP 認証ファクトリーを削除するには、以下のコマンドを使用します。
security disable-http-auth-management
または、以下のコマンドを使用して、アクティブ HTTP 認証ファクトリーから特定のメカニズムを削除できます。
security disable-http-auth-management --mechanism=MECHANISM
関連情報
1.2.9. レガシーのコア管理認証を使用した一方向 SSL/TLS の管理インターフェイスの設定
一方向 SSL/TLS のみを使用して通信を行うよう JBoss EAP 管理んたーフェースを設定すると、セキュリティーが強化されます。クライアントと管理インターフェイス間のネットワークトラフィックはすべて暗号化されるため、仲介者攻撃などのセキュリティー攻撃のリスクが軽減されます。
この手順では、JBoss EAP インスタンスとの暗号化されていない通信を無効にします。この手順は、スタンドアロンサーバーとマネージドドメイン設定の両方に該当します。マネージドドメインの場合は、管理 CLI コマンドにホスト名 (例: /host=master
) を付けます。
管理インターフェイスで一方向 SSL/TLS を有効にする手順を実行すると、明示的に指示しない限り、設定は再読み込みされません。これを実行すると、管理インターフェイスがロックされる可能性があります。
キーストアを作成して、管理インターフェイスをセキュア化。
詳細は、管理インターフェイスを保護するための鍵ストアの作成 を参照してください。
管理インターフェイスが HTTPS にバインドされようにする
詳しくは、管理インターフェイスの HTTPS へのバインド を参照してください。
オプション: カスタムの
socket-binding-group
を実装します。詳しくは カスタム socket-binding-group をご覧ください。
新しいセキュリティーレルムを作成します。
詳しくは、新しいセキュリティーレルムの作成 をご覧ください。
新しいセキュリティーレルムを使用するように管理インターフェイスを設定します。
詳細は、セキュリティーレルムを使用する管理インターフェイスの設定 を参照してください。
キーストアを使用するように管理インターフェイスを設定します。
詳しくは、キーストアを使用する管理インターフェイスの設定 をご覧ください。
jboss-cli.xml
を更新します。詳細は、jboss-cli.xml ファイル の更新を参照してください。
1.2.9.1. キーストアを作成してた管理インターフェイスのセキュア化
キーストアを作成して、管理インターフェイスのセキュリティーを確保します。
このキーストアは、管理インターフェイスが JCEKS 形式のキーストアと互換性がないため、JKS 形式である必要があります。
手順
以下の CLI コマンドでキーストアを作成します。
パラメーター (
alias
、keypass
、keystore
、storepass
、dname
など) の値の例を、環境に合わせて正しい値に置き換えてください。$ keytool -genkeypair -alias appserver -storetype jks -keyalg RSA -keysize 2048 -keypass password1 -keystore EAP_HOME/standalone/configuration/identity.jks -storepass password1 -dname "CN=appserver,OU=Sales,O=Systems Inc,L=Raleigh,ST=NC,C=US" -validity 730 -v
パラメーターの validity
は、キーが有効な日数を指定します。730
の値は 2 年と等しくなります。
1.2.9.2. 管理インターフェイスが HTTPS にバインドされようにする
管理インターフェイスが HTTPS にバインドするように JBoss EAP を設定します。
手順
スタンドアロンサーバーを運用する場合の設定
管理インターフェイスが HTTPS にバインドされるようにするには、
management-https
設定を追加し、management-http
設定を削除する必要があります。以下の CLI コマンドを使用して管理インターフェイスを HTTPS にバインドします。
/core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https) /core-service=management/management-interface=http-interface:undefine-attribute(name=socket-binding)
管理ドメイン実行時の設定
secure-port
を追加し、ポート設定を削除して、management-interface
属性内のソケット要素を変更します。以下のコマンドを使用して管理インターフェイスを HTTPS にバインドします。
/host=master/core-service=management/management-interface=http-interface:write-attribute(name=secure-port,value=9993) /host=master/core-service=management/management-interface=http-interface:undefine-attribute(name=port)
1.2.9.3. カスタムの socket-binding-group
カスタムの socket-binding-group
を使用する場合は、management-https
バインディングが定義されていることを確認する必要があります。デフォルトではポート 9993
にバインドされます。これは、サーバーの設定ファイルの socket-binding-group
属性から確認したり、管理 CLI を使用して確認できます。
/socket-binding-group=standard-sockets/socket-binding=management-https:read-resource(recursive=true) { "outcome" => "success", "result" => { "client-mappings" => undefined, "fixed-port" => false, "interface" => "management", "multicast-address" => undefined, "multicast-port" => undefined, "name" => "management-https", "port" => expression "${jboss.management.https.port:9993}" } }
1.2.9.4. 新しいセキュリティーレルムの作成
新しいセキュリティーレルムを作成します。
この手順では、HTTPS の ManagementRealmHTTPS
を使用する新しいセキュリティーレリムは、EAP_HOME/standalone/configuration/
ディレクトリーに位置する https-mgmt-users.properties
というプロパティーファイルを使用します。
手順
ユーザー名とパスワードを格納するプロパティーファイルを作成します。
ユーザー名とパスワードは後でファイルに追加できます。ただし、現在は、
https-mgmt-users.properties
という名前で空のファイルを作成し、その場所に保存する必要があります。以下の例は、touch
コマンドの使用を示しています。しかし、テキストエディターなどの他のメカニズムを使用することもできます。例: touch コマンドを使用した空のファイルの作成
$ touch EAP_HOME/standalone/configuration/https-mgmt-users.properties
次に、以下の管理 CLI コマンドを使用して
ManagementRealmHTTPS
という名前の新規セキュリティーレルムを作成します。/core-service=management/security-realm=ManagementRealmHTTPS:add /core-service=management/security-realm=ManagementRealmHTTPS/authentication=properties:add(path=https-mgmt-users.properties,relative-to=jboss.server.config.dir)
プロパティーファイルにユーザーを追加します。
これで、新しいセキュリティーレルムを作成し、認証用にプロパティーファイルを使用するよう設定しました。
EAP_HOME/bin/
ディレクトリーのadd-user
スクリプトを使用して、このプロパティーファイルにユーザーを追加する必要があります。add-user
スクリプトを実行する際には、-up
と-r
オプションをそれぞれ使用してプロパティーファイルとセキュリティーレルムの両方を指定する必要があります。そこから、add-user
スクリプトは、https-mgmt-users.properties
ファイルに保存するためのユーザー名とパスワードの情報を対話的に要求します。$ EAP_HOME/bin/add-user.sh -up EAP_HOME/standalone/configuration/https-mgmt-users.properties -r ManagementRealmHTTPS ... Enter the details of the new user to add. Using realm 'ManagementRealmHTTPS' as specified on the command line. ... Username : httpUser Password requirements are listed below. To modify these restrictions edit the add-user.properties configuration file. - The password must not be one of the following restricted values {root, admin, administrator} - The password must contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s) - The password must be different from the username ... Password : Re-enter Password : About to add user 'httpUser' for realm 'ManagementRealmHTTPS' ... Is this correct yes/no? yes .. Added user 'httpUser' to file 'EAP_HOME/configuration/https-mgmt-users.properties' ... Is this new user going to be used for one AS process to connect to another AS process? e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls. yes/no? no
重要プロパティーファイルを使用してユーザー名とパスワードを保存するようにセキュリティーレルムを設定する場合、各レリムは別のレルムと共有されていない個別のプロパティーを使用することが推奨されます。
1.2.9.5. セキュリティーレルムを使用する管理インターフェイスの設定
管理インターフェイスがセキュリティーレルムを使用するように設定するには、管理 CLI コマンドを使用します。
手順
次の管理 CLI コマンドを実行します。
/core-service=management/management-interface=http-interface:write-attribute(name=security-realm,value=ManagementRealmHTTPS)
1.2.9.6. キーストアを使用する管理インターフェイスの設定
管理用 CLI コマンドを使用して、キーストアを使用するように管理インターフェイスを設定します。
手順
以下の管理 CLI コマンドを使用して、キーストアを使用するように管理インターフェイスを設定します。
パラメーターファイルでは、パスワードとエイリアスの値を、管理インターフェイスをセキュア化するためのキーストアの作成 手順からコピーする必要があります。
/core-service=management/security-realm=ManagementRealmHTTPS/server-identity=ssl:add(keystore-path=identity.jks,keystore-relative-to=jboss.server.config.dir,keystore-password=password1, alias=appserver)
注記キーストアのパスワードを更新するには、以下の CLI コマンドを使用します。
/core-service=management/security-realm=ManagementRealmHTTPS/server-identity=ssl:write-attribute(name=keystore-password,value=newpassword)
サーバーの設定を再読み込みします。
reload
サーバー設定のリロード後には、起動したサービスの数を示すテキストの直前に以下の内容がログに含まれるはずです。
13:50:54,160 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0061: Http management interface listening on https://127.0.0.1:9993/management 13:50:54,162 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0052: Admin console listening on https://127.0.0.1:9993
これで、管理インターフェイスはポート 9993
をリッスンするようになります。これにより、手順が成功したことを確認できました。
このとき、CLI は接続を切断し、ポートバインディングが変更されたため再接続できなくなります。
次のステップ に進み、jboss-cli.xml
ファイルを更新して、管理 CLI が再接続できるようにします。
1.2.9.7. jboss-cli.xml ファイルの更新
管理 CLI を使用して管理アクションを実行する場合は、EAP_HOME
/bin/jboss-cli.xml ファイルを更新する必要があります。
手順
EAP_HOME
/bin/jboss-cli.xml ファイルを以下のように更新します。-
<default-protocol>
の値をhttps-remoting
に更新します。 -
<default-controller>
において、<protocol>
の値をhttps-remoting
に更新します。 -
<default-controller>
で、<port>
の値を9993
に更新します。
例:
jboss-cli.xml
<jboss-cli xmlns="urn:jboss:cli:2.0"> <default-protocol use-legacy-override="true">https-remoting</default-protocol> <!-- The default controller to connect to when 'connect' command is executed w/o arguments --> <default-controller> <protocol>https-remoting</protocol> <host>localhost</host> <port>9993</port> </default-controller> ...
-
次回、管理 CLI を使用して管理インターフェイスに接続する場合は、サーバー証明書を受け入れ、ManagementRealmHTTPS
セキュリティーレルムに対して認証を行う必要があります。
例: サーバー証明書の許可および認証
$ ./jboss-cli.sh -c Unable to connect due to unrecognised server certificate Subject - CN=appserver,OU=Sales,O=Systems Inc,L=Raleigh,ST=NC,C=US Issuer - CN=appserver, OU=Sales, O=Systems Inc, L=Raleigh, ST=NC, C=US Valid From - Tue Jun 28 13:38:48 CDT 2016 Valid To - Thu Jun 28 13:38:48 CDT 2018 MD5 : 76:f4:81:8b:7e:c3:be:6d:ee:63:c1:7a:b7:b8:f0:fb SHA1 : ea:e3:f1:eb:53:90:69:d0:c9:69:4a:5a:a3:20:8f:76:c1:e6:66:b6 Accept certificate? [N]o, [T]emporarily, [P]ermenantly : p Authenticating against security realm: ManagementRealmHTTPS Username: httpUser Password: [standalone@localhost:9993 /]
security-realm
と ssl-context
の 両方 が定義されている場合、JBoss EAP は ssl-context
によって提供される SSL / TLS 設定を使用します。
1.2.10. レガシーコア管理認証のある管理インターフェイスに双方向 SSL/TLS を設定する
クライアント認証 とも呼ばれる双方向 SSL/TLS 認証は、SSL/TLS 証明書を使用してクライアントとサーバーの両方を認証します。これは、クライアントとサーバーの両方に証明書があるという点で、一方向 SSL / TLS の管理インターフェイスの設定 とは異なります。そのため、サーバーの伝えるアイデンティティーだけでなく、クライアントの伝えるアイデンティティーも信頼できます。
本セクションでは、以下の規則を使用します。
- HOST1
-
JBoss サーバーのホスト名。例:
jboss.redhat.com
. - HOST2
-
クライアントに適した名前。例:
myclient
これは必ずしも実際のホスト名ではないことに注意してください。 - CA_HOST1
-
HOST1 証明書に使用する DN (識別名) です。たとえば、
cn=jboss,dc=redhat,dc=com
となります。 - CA_HOST2
-
HOST2 証明書に使用する DN (識別名) です。例:
cn=myclient,dc=redhat,dc=com
キーストアおよびトラストストアパスワードの保存にパスワード vault が使用された場合 (推奨)、パスワード vault はすでに作成されるはずです。パスワード vault の詳細は、Red Hat JBoss Enterprise Application Platform 7セキュリティーアーキテクチャーの パスワード Vault と パスワード Vault システム を参照してください。
Red Hat では、影響するすべてのパッケージで TLSv1.1 または TLSv1.2 を利用するために SSLv2、SSLv3、および TLSv1.0 を明示的に無効化することを推奨しています。
手順
キーストアを生成します。
$ keytool -genkeypair -alias HOST1_alias -keyalg RSA -keysize 1024 -validity 365 -keystore HOST1.keystore.jks -dname "CA_HOST1" -keypass secret -storepass secret $ keytool -genkeypair -alias HOST2_alias -keyalg RSA -keysize 1024 -validity 365 -keystore HOST2.keystore.jks -dname "CA_HOST2" -keypass secret -storepass secret
証明書をエクスポートします。
$ keytool -exportcert -keystore HOST1.keystore.jks -alias HOST1_alias -keypass secret -storepass secret -file HOST1.cer $ keytool -exportcert -keystore HOST2.keystore.jks -alias HOST2_alias -keypass secret -storepass secret -file HOST2.cer
対立するトラストストアにインポートします。
$ keytool -importcert -keystore HOST1.truststore.jks -storepass secret -alias HOST2_alias -trustcacerts -file HOST2.cer $ keytool -importcert -keystore HOST2.truststore.jks -storepass secret -alias HOST1_alias -trustcacerts -file HOST1.cer
CertificateRealm を定義します。
サーバー (
host.xml
またはstandalone.xml
) の設定で CertificateRealm を定義し、その先となるインターフェイスを指定します。これは、以下のコマンドで実行できます。/core-service=management/security-realm=CertificateRealm:add() /core-service=management/security-realm=CertificateRealm/server-identity=ssl:add(keystore-path=/path/to/HOST1.keystore.jks, keystore-password=secret,alias=HOST1_alias) /core-service=management/security-realm=CertificateRealm/authentication=truststore:add(keystore-path=/path/to/HOST1.truststore.jks,keystore-password=secret)
http-interface
のsecurity-realm
を新しい CertificateRealm に変更します。/core-service=management/management-interface=http-interface:write-attribute(name=security-realm,value=CertificateRealm)
CLI の SSL/TLS 設定を追加します。
重要双方向 SSL/TLS の追加に加え、管理インターフェイスも HTTPS にバインドされるように設定してください。詳細は、レガシーのコア管理認証を使用した一方向 SSL/TLS の管理インターフェイスの設定 の 管理インターフェイスが HTTPS にバインドされようにする を参照してください。
EAP_HOME/bin/jboss-cli.xml
を設定ファイルとして使用する CLI の SSL/TLS 設定を追加します。キーストアとトラストストアパスワードをプレーンテキストに保存するには、
EAP_HOME/bin/jboss-cli.xml
を編集し、変数に適切な値を使用して SSL/TLS 設定を追加します。例: プレーンテキストの jboss-cli.xml キーストアおよびトラストストアのパスワード
<ssl> <alias>HOST2_alias</alias> <key-store>/path/to/HOST2.keystore.jks</key-store> <key-store-password>secret</key-store-password> <trust-store>/path/to/HOST2.truststore.jks</trust-store> <trust-store-password>secret</trust-store-password> <modify-trust-store>true</modify-trust-store> </ssl>
パスワード vault に保存されているキーストアおよびトラストストアパスワードを使用するには、vault 設定および適切な vault の値を
EAP_HOME/bin/jboss-cli.xml
に追加する必要があります。例: パスワード vault の jboss-cli.xml キーストアおよびトラストストアのパスワード
<ssl> <vault> <vault-option name="KEYSTORE_URL" value="path-to/vault/vault.keystore"/> <vault-option name="KEYSTORE_PASSWORD" value="MASK-5WNXs8oEbrs"/> <vault-option name="KEYSTORE_ALIAS" value="vault"/> <vault-option name="SALT" value="12345678"/> <vault-option name="ITERATION_COUNT" value="50"/> <vault-option name="ENC_FILE_DIR" value="EAP_HOME/vault/"/> </vault> <alias>HOST2_alias</alias> <key-store>/path/to/HOST2.keystore.jks</key-store> <key-store-password>VAULT::VB::cli_pass::1</key-store-password> <key-password>VAULT::VB::cli_pass::1</key-password> <trust-store>/path/to/HOST2.truststore.jks</trust-store> <trust-store-password>VAULT::VB::cli_pass::1</trust-store-password> <modify-trust-store>true</modify-trust-store> </ssl>
security-realm
と ssl-context
の 両方 が定義されている場合、JBoss EAP は ssl-context
によって提供される SSL / TLS 設定を使用します。
1.2.11. HTTPS リスナーのリファレンス
HTTPS リスナーで使用できる属性の完全リストは、JBoss EAP設定ガイドの Undertow Subsystem Attributes を参照してください。
1.2.11.1. 暗号化スイートについて
許可される一連の暗号を設定できます。JSSE 構文については、コンマ区切りのリストが必要です。OpenSSL 構文については、コロン区切のリストが必要です。1 つのみの構文を使うようにしてください。デフォルトは JVM のデフォルトです。
強度の低い暗号を使用すると、セキュリティーが重大なリスクにさらされることになります。暗号スイートの NIST 推奨は NIST ガイドライン を参照してください。
利用可能な OpenSSL 暗号のリスト は、OpenSSL ドキュメントを参照してください。以下はサポート対象外であることに注意してください。
- @SECLEVEL
- SUITEB128
- SUITEB128ONLY
- SUITEB192
標準 JSSE 暗号のリスト は、Java のドキュメントを参照してください。
有効な暗号スイートのリストを更新するには、undertow
サブシステムの HTTPS リスナーの enabled-cipher-suites 属性を使用します。
例: 有効化された暗号化スイートリストを更新する管理 CLI コマンド
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=enabled-cipher-suites,value="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA")
この例では、2 つの暗号だけが一覧表示されますが、実際の例はより多くの暗号が使用されます。
1.2.12. Open SSL プロバイダーで TLS 1.3 プロトコルのサポートを可能にする
ssl-context
設定で cipher-suite-names
属性を設定して、TLS の OpenSSL プロバイダーで TLS 1.3 プロトコルのサポートを有効にできます。JBoss EAP が Open SSL TLS プロバイダーを使用するように設定するには、次のいずれかの方法を選択します。
- Elytron サブシステムがデフォルトで Open SSL TLS プロバイダーを使用するように設定します。
-
server-ssl-context
コンポーネントまたはclient-ssl-context
コンポーネントのproviders
属性を設定して、Open SSL TLS プロバイダーを使用します。
TLS 1.3 を JDK 11 で実行時のパフォーマンスは、TLS 1.2 と比較すると、低下する可能性があります。これは、クライアントがサーバーに対して非常に多くの TLS 1.3 要求を行った場合に発生する可能性があります。新しい JDK バージョンにアップグレードさせることで、パフォーマンスを向上できます。実稼働環境で有効にする前に、TLS 1.3 を使用する設定で、パフォーマンス低下がないかをテストします。
前提条件
- アプリケーションに対して、一方向の SSL/TLS または双方向の SSL/TLS を有効にしておく。
手順
次のいずれかの方法を選択して、JBoss EAP 7.4 インスタンスが Open SSL TLS プロバイダーを使用するように設定します。
elytron
サブシステムがデフォルトで Open SSL TLS プロバイダーを使用するように設定します。これには、デフォルトのfinal-providers
設定 (この設定ではグローバルにプロバイダーをすべて登録し終えてから Open SSL TLS プロバイダーが登録される) を削除します。/subsystem=elytron:undefine-attribute(name=final-providers) reload
次に、グローバルに登録する全プロバイダーの前に、Open SSL TLS プロバイダーを優先的に登録します。
/subsystem=elytron:write-attribute(name=initial-providers, value=combined-providers)
server-ssl-context
またはclient-ssl-context
のproviders
属性を設定して、Open SSL TLS プロバイダーを使用します。server SSC
という既存のserver-ssl-context
にprovider
属性を設定する例です。/subsystem=elytron/server-ssl-context=serverSSC:write-attribute(name=providers,value=openssl) reload
オプション: TLS 1.3 プロトコル以外のプロトコルを使用するように
ssl-context
を設定した場合は、ssl-context
のprotocols
属性に TLS 1.3 プロトコルを含めるように設定する必要があります。/subsystem=elytron/server-ssl-context=serverSSC:write-attribute(name=protocols,value=[TLSv1.3])
ssl-context
設定でcipher-suite-names
属性を設定して、OpenSSL プロバイダーで TLS 1.3 プロトコルのサポートを有効にできます。次の例では、cipher-suit-names
属性の値として、TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
を設定しています。/subsystem=elytron/server-ssl-context=serverSSC:write-attribute(name=cipher-suite-names,value=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256)
JBoss EAP インスタンスをリロードします。
reload
オプション: TLS 1.3 プロトコルと TLS 1.3 サイファースイートを使用して、サーバーとの SSL 暗号化接続を正常に確立できるかどうかをテストします。
curl
などのツールを使用して、設定の出力を確認します。curl -v https://<ip_address>:<ssl_port>
TLS_AES_256_GCM_SHA384
が TLS 1.3 プロトコルで SSL 接続を保護していることを示す出力例です。SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN, server accepted to use h2 * Server certificate: * subject: C=Unknown; ST=Unknown; L=Unknown; O=Unknown; OU=Unknown; CN=localhost * start date: Oct 6 14:58:16 2020 GMT * expire date: Nov 5 15:58:16 2020 GMT * issuer: C=Unknown; ST=Unknown; L=Unknown; O=Unknown; OU=Unknown; CN=localhost * SSL certificate verify result: self signed certificate (18), continuing anyway.
関連情報
- アプリケーションの一方向 SSL/TLS または双方向 SSL/TLS を有効にする方法は、Elytron サブシステムを使用したアプリケーションの一方向 SSL/TLS の有効化 を参照してください。
-
client-ssl-context
については、Using aclient-ssl-context
を参照してください。 -
server-ssl-context
については、 Using aserver-ssl-context
を参照してください。
1.2.13. FIPS 140-2 準拠暗号化
以下の方法のいずれかを使用することで、Red Hat Enterprise Linux で FIPS 140-2 に準拠する暗号を設定できます。
1.2.13.1. Red Hat Enterprise Linux 7 以降での SSL/TLS の FIPS 140-2 暗号化の有効化。
Undertow は、SSL/TLS に FIPS 140-2 準拠の暗号を使用するように設定できます。この設定例の範囲は、FIPS モードで Mozilla NSS ライブラリーを使用する Red Hat Enterprise Linux 7 以降に限定されます。
インストール済みの Red Hat Enterprise Linux は、FIPS 140-2 に準拠するようにすでに設定されています。詳細は、Red Hat カスタマーポータルにある How can I make RHEL 6 or RHEL 7 FIPS 140-2 compliant? を参照してください。
FIPS モードで JBoss EAP を実行するとき TLS 1.2 プロトコルを使用すると、NoSuchAlgorithmException
が発生する可能性があります。この問題の詳細は、Red Hat カスタマーポータルにある NoSuchAlgorithmException: no such algorithm: SunTls12MasterSecret のソリューションを参照してください。
そのため、HTTP/2 には TLS 1.2 プロトコルが必要なため、HTTP/2 を FIPS モードで設定することはできません。FIPS モード (PKCS11) は TLS 1 および TLS 1.1 プロトコルをサポートしているため、以下を使用できます。
- Oracle/OpenJDK の TLS 1.1
- IBM java の TLS 1
SSL/TLS に FIPS 140-2 に準拠する暗号を使用するように Undertow を設定するには、以下を行う必要があります。
- NSS データベースを設定します 。
- SSL/TLS に FIPS 140-2 対応暗号の管理 CLI を設定します 。
-
Elytron または レガシーコア管理認証 のいずれかを使用するように
undertow
サブシステムを設定します。
OpenSSL プロバイダーにはプライベートキーが必要ですが、PKCS11 ストアから秘密鍵を取得することはできません。FIPS は、FIPS 準拠の暗号化モジュールからの暗号化されていない鍵のエクスポートを許可しません。そのため、elytron
サブシステムとレガシーのセキュリティーの両方では、FIPS モードで TLS の OpenSSL プロバイダーを使用することはできません。
NSS データベースの設定
NSS データベースを格納するために、適切なユーザーが所有するディレクトリーを作成します。
NSS データベースディレクトリーを作成するコマンドの例
$ mkdir -p /usr/share/jboss-as/nssdb $ chown jboss /usr/share/jboss-as/nssdb $ modutil -create -dbdir /usr/share/jboss-as/nssdb
注記- RHEL7 以前のデフォルトのデータベース形式である DBM ファイル形式は廃止されました。NSS は、デフォルトで SQL を使用するようになりました。
- jboss ユーザーはあくまで例です。これは、オペレーティングシステムで、JBoss EAP を実行できる、アクティブなユーザーに置き換えてください。
NSS 設定ファイル (
/usr/share/jboss-as/nss_pkcsll_fips.cfg
) を作成します。以下を指定する必要があります。
- 名前
- NSS ライブラリーが置かれているディレクトリー
以前のステップで NSS データベースが作成されたディレクトリー
例:
nss_pkcsll_fips.cfg
name = nss-fips nssLibraryDirectory=/usr/lib64 nssSecmodDirectory=/usr/share/jboss-as/nssdb nssDbMode = readOnly nssModule = fips
注記64 ビットバージョンの Red Hat Enterprise Linux 6 使用していない場合は、
nssLibraryDirectory
を/usr/lib64
ではなく、/usr/lib
に置き換えます。
Java セキュリティー設定ファイルを編集します。この設定ファイルは JVM 全体に影響しますが、以下のいずれかの手段で定義できます。
-
デフォルトの設定ファイル
java.security
は JDK で入手できます。このファイルは、他のセキュリティー設定ファイルが指定されていない場合に使用されます。このファイルの場所は、JDK ベンダーのドキュメントを参照してください。 カスタムの Java セキュリティー設定ファイルを定義し、
-Djava.security.properties=/path/to/java.security.properties
を使用して参照します。この方法で参照されると、デフォルトのセキュリティーファイルの設定が上書きされます。このオプションは、異なるセキュリティー設定を必要とする同じホストで複数の JVM を実行している場合に便利です。以下の行を Java セキュリティー設定ファイルに追加します。
例:
java.security
security.provider.1=sun.security.pkcs11.SunPKCS11 /usr/share/jboss-as/nss_pkcsll_fips.cfg
注記上記の行で指定されている
nss_pkcsll_fips.cfg
設定ファイルは、前のステップで作成したファイルです。以下のリンクを設定ファイルから更新する必要があります。
security.provider.5=com.sun.net.ssl.internal.ssl.Provider
上記を以下に変更します。
security.provider.5=com.sun.net.ssl.internal.ssl.Provider SunPKCS11-nss-fips
重要このファイルの他の
security.provider.X
行 (例:security.provider.2
) には、このプロバイダーに優先順位が指定されるように X の値を増やす必要があります。
-
デフォルトの設定ファイル
前の手順で作成した NSS データベースディレクトリーで
modutil
コマンドを実行して、FIPS モードを有効化します。modutil -fips true -dbdir /usr/share/jboss-as/nssdb
注記この時点では、NSS 共有オブジェクトの一部に対するライブラリー署名の再生成を求めるセキュリティーライブラリーエラーが発生することがあります。
FIPS トークンにパスワードを設定します。
トークンの名前は、NSS FIPS 140-2 Certificate DB である 必要があります 。
modutil -changepw "NSS FIPS 140-2 Certificate DB" -dbdir /usr/share/jboss-as/nssdb
重要FIPS トークンに使用されるパスワードは、FIPS に準拠したパスワードである必要があります。パスワードの強度が不十分な場合は、以下のようなエラーが発生することがあります。ERROR: Unable to change password on token "NSS FIPS 140-2 Certificate DB"
NSS ツールを使用して証明書を作成します。
コマンド例
$ certutil -S -k rsa -n undertow -t "u,u,u" -x -s "CN=localhost, OU=MYOU, O=MYORG, L=MYCITY, ST=MYSTATE, C=MY" -d /usr/share/jboss-as/nssdb
以下のコマンドを実行することで、JVM が PKCS11 キーストアから秘密鍵を読み取りできることを確認します。
$ keytool -list -storetype pkcs11
FIPS を有効にすると、JBoss EAP の起動時に以下のエラーが発生することがあります。
10:16:13,993 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Failed to start service jboss.server.controller.management.security_realm.ApplicationRealm.key-manager: org.jboss.msc.service.StartException in service jboss.server.controller.management.security_realm.ApplicationRealm.key-manager: WFLYDM0018: Unable to start service at org.jboss.as.domain.management.security.AbstractKeyManagerService.start(AbstractKeyManagerService.java:85) at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1963) at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1896) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.security.KeyStoreException: FIPS mode: KeyStore must be from provider SunPKCS11-nss-fips at sun.security.ssl.KeyManagerFactoryImpl$SunX509.engineInit(KeyManagerFactoryImpl.java:67) at javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.java:256) at org.jboss.as.domain.management.security.AbstractKeyManagerService.createKeyManagers(AbstractKeyManagerService.java:130) at org.jboss.as.domain.management.security.AbstractKeyManagerService.start(AbstractKeyManagerService.java:83) ... 5 more
FIPS 140-2 準拠の暗号を使用しないレガシーコア管理認証にデフォルトのキーマネージャーなどの既存のキーマネージャーが設定されている場合は、このメッセジーが表示されます。
SSL/TLS への FIPS 140-2 対応暗号の管理 CLI の設定
SSL/TLS 対応の FIPS 140-2 準拠暗号化が有効な環境で動作するように、JBoss EAP 管理 CLI を設定する必要があります。デフォルトでは、このような環境で管理 CLI を使用しようとすると、次の例外が表示されます。org.jboss.as.cli.CliInitializationException: java.security.KeyManagementException: FIPS mode: only SunJSSE TrustManagers may be used
従来の
security
サブシステムを使用している場合:以下のように、
jboss-cli.sh
ファイルのjavax.net.ssl.keyStore
およびjavax.net.ssl.trustStore
システムプロパティーを更新します。JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStore=NONE -Djavax.net.ssl.trustStoreType=PKCS11" JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.keyStore=NONE -Djavax.net.ssl.keyStoreType=PKCS11 -Djavax.net.ssl.keyStorePassword=P@ssword123"
elytron
サブシステムを使用している場合は、以下の手順に従います。以下の内容を含む管理 CLI の XML 設定ファイルを作成します。
例:
cli-wildfly-config.xml
<configuration> <authentication-client xmlns="urn:elytron:client:1.2"> <key-stores> <key-store name="truststore" type="PKCS11"> <key-store-clear-password password="P@ssword123"/> </key-store> </key-stores> <ssl-contexts> <ssl-context name="client-cli-context"> <trust-store key-store-name="truststore"/> <cipher-suite selector="${cipher.suite.filter}"/> <protocol names="TLSv1.1"/> </ssl-context> </ssl-contexts> <ssl-context-rules> <rule use-ssl-context="client-cli-context"/> </ssl-context-rules> </authentication-client> </configuration>
注記IBM JDK を使用している場合は、必要な設定を行うための IBM 管理 CLI 設定の例 を参照してください。
管理 CLI の起動時に、
-Dwildfly.config.url
プロパティーを使用して管理 CLI スクリプトに設定ファイルを渡します。以下に例を示します。$ jboss-cli.sh -Dwildfly.config.url=cli-wildfly-config.xml
Elytron および Undertow サブシステムの設定
FIPS 140-2 準拠暗号化
key-store
、key-manager
、ssl-context
を追加します。/subsystem=elytron/key-store=fipsKS:add(type=PKCS11,provider-name="SunPKCS11-nss-fips",credential-reference={clear-text="P@ssword123"}) /subsystem=elytron/key-manager=fipsKM:add(key-store=fipsKS,algorithm="SunX509",provider-name=SunPKCS11-nss-fips,credential-reference={clear-text="P@ssword123"}) /subsystem=elytron/server-ssl-context=fipsSSC:add(key-manager=fipsKM,protocols=["TLSv1.1"])
undertow
サブシステムを更新して、新しいssl-context
を使用します。注記https-listener
には、常にsecurity-realm
またはssl-context
が設定されている必要があります。2 つの設定間で変更する場合は、以下に示すように、コマンドを単一のバッチで実行する必要があります。batch /subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm) /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context,value=fipsSSC) run-batch reload
FIPS モードの elytron
サブシステムでは、FIPS モードの OpenJDK および Oracle JDK により、カスタム KeyManager
または TrustManager
実装に基づいた高度な機能の使用が制限されます。以下の設定属性はサーバー上では機能しません。
-
server-ssl-context.security-domain
-
trust-manager.certificate-revocation-list
従来のコア管理認証を使用した Undertow の設定
必要に応じて、elytron
サブシステムの代わりに従来のコア管理認証を使用して、SSL/TLS の FIPS 140-2 準拠暗号化の設定を完了できます。
SSL/TLS を使用するように Undertow を設定します。
注記以下のコマンドはバッチモードで実行する必要があります。あるいは、ssl サーバーアイデンティティーを追加した後にサーバーをリロードする必要があります。以下の例はバッチモードを使用しています。
batch /core-service=management/security-realm=HTTPSRealm:add /core-service=management/security-realm=HTTPSRealm/server-identity=ssl:add(keystore-provider=PKCS11, keystore-password="strongP@ssword1") /subsystem=undertow/server=default-server/https-listener=https:add(socket-binding=https, security-realm=HTTPSRealm, enabled-protocols="TLSv1.1") run-batch
Undertow を SSL / TLS に設定する基本的な詳細は、Setting up an SSL/TLS for Applications で説明されています。
Undertow によって使用される暗号スイートを設定します。
SSL/TLS を設定した後は、特定のセットの暗号スイートを有効にするために https リスナーとセキュリティーレルムを設定する必要があります。
必要な暗号スイート
SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_anon_WITH_AES_128_CBC_SHA, TLS_ECDH_anon_WITH_AES_256_CBC_SHA
https リスナーに暗号スイートを有効にする基本的な方法は、暗号スイートについて で説明されています。https リスナーで暗号化スイートを有効にするには、以下を行います。
HTTPS リスナーでの暗号スイートを有効にするコマンドの例
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=enabled-cipher-suites,value="SSL_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_anon_WITH_AES_128_CBC_SHA,TLS_ECDH_anon_WITH_AES_256_CBC_SHA")
セキュリティーレルムで暗号スイートを有効にします。
セキュリティーレルムで暗号スイートを有効化するコマンドの例
/core-service=management/security-realm=HTTPSRealm/server-identity=ssl:write-attribute(name=enabled-cipher-suites, value=[SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_anon_WITH_AES_128_CBC_SHA, TLS_ECDH_anon_WITH_AES_256_CBC_SHA])
1.2.13.2. Bouncy Castle を使用した SSL/TLS の FIPS 140-2 暗号化の有効化
Undertow は、SSL/TLS に FIPS 140-2 準拠の暗号を使用するように設定できます。この設定例の範囲は、Red Hat Enterprise Linux 7 以降に限定されます。Bouncy Castle JAR は Red Hat によって提供されていないため、Bouncy Castle から直接取得する必要があります。
前提条件
-
環境が
BouncyCastle
プロバイダーを使用するように設定されていることを確認します 。 サーバー上には、Bouncy Castle キーストアが存在している必要があります。存在しない場合は、以下のコマンドを使用して作成できます。
$ keytool -genkeypair -alias ALIAS -keyalg RSA -keysize 2048 -keypass PASSWORD -keystore KEYSTORE -storetype BCFKS -storepass STORE_PASSWORD
SSL/TLS への FIPS 140-2 対応暗号の管理 CLI の設定
SSL/TLS 対応の FIPS 140-2 準拠暗号化が有効な環境で動作するように、JBoss EAP 管理 CLI を設定する必要があります。
以下の内容を含む管理 CLI の XML 設定ファイルを作成します。
例:
cli-wildfly-config.xml
<configuration> <authentication-client xmlns="urn:elytron:client:1.2"> <key-stores> <key-store name="truststore" type="BCFKS"> <file name="${truststore.location}" /> <key-store-clear-password password="${password}" /> </key-store> <key-store name="keystore" type="BCFKS"> <file name="${keystore.location}" /> <key-store-clear-password password="${password}" /> </key-store> </key-stores> <ssl-contexts> <ssl-context name="client-cli-context"> <key-store-ssl-certificate algorithm="PKIX" key-store-name="keystore"> <key-store-clear-password password="${password"} /> </key-store-ssl-certificate> <trust-store key-store-name="truststore"/> <trust-manager algorithm="PKIX"> </trust-manager> <cipher-suite selector="TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CCM,TLS_RSA_WITH_AES_128_CCM"/> <protocol names="TLSv1.2"/> </ssl-context> </ssl-contexts> <ssl-context-rules> <rule use-ssl-context="client-cli-context"/> </ssl-context-rules> </authentication-client> </configuration>
管理 CLI の起動時に、
-Dwildfly.config.url
プロパティーを使用して管理 CLI スクリプトに設定ファイルを渡します。以下に例を示します。$ jboss-cli.sh -Dwildfly.config.url=cli-wildfly-config.xml
Elytron および Undertow サブシステムの設定
FIPS 140-2 準拠暗号化
key-store
、key-manager
、ssl-context
を追加します。キーストアを定義した場合は、そのタイプはBCFKS
である必要があります。/subsystem=elytron/key-store=fipsKS:add(path=KEYSTORE,relative-to=jboss.server.config.dir,credential-reference={clear-text=STORE_PASSWORD},type="BCFKS") /subsystem=elytron/key-manager=fipsKM:add(key-store=fipsKS,algorithm="PKIX",credential-reference={clear-text=PASSWORD}) /subsystem=elytron/server-ssl-context=fipsSSC:add(key-manager=fipsKM,protocols=["TLSv1.2"],cipher-suite-filter="TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CCM,TLS_RSA_WITH_AES_128_CCM")
undertow
サブシステムを更新して、新しいssl-context
を使用します。注記https-listener
には、常にsecurity-realm
またはssl-context
が設定されている必要があります。2 つの設定間で変更する場合は、以下に示すように、コマンドを単一のバッチで実行する必要があります。batch /subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm) /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context,value=fipsSSC) run-batch reload
1.2.14. IBM JDK における FIPS 140-2 準拠暗号化
IBM JDK では、マルチプラットフォーム用の IBM Java Cryptographic Extension (JCE) IBMJCEFIPS プロバイダーと IBM Java Secure Sockets Extension (JSSE) FIPS 140-2 Cryptographic Module (IBMJSSE2) は、FIPS 140-2 準拠暗号化を提供します。
IBMJCEFIPS プロバイダーの詳細は、IBM Documentation for IBM JCEFIPS および NIST IBMJCEFIPS – Security Policy を参照してください。IBMJSSE2 の詳細は、Running IBMJSSE2 in FIPS mode を参照します。
1.2.14.1. キーストレージ
IBM JCE はキーストアを提供しません。このキーはコンピューターに保存され、その物理境界は残しません。このキーがコンピューター間で移動している場合は暗号化する必要があります。
FIPS 準拠のモードで keytool
を実行するには、以下のような各コマンドで -providerClass
を使用します。
keytool -list -storetype JCEKS -keystore mystore.jck -storepass mystorepass -providerClass com.ibm.crypto.fips.provider.IBMJCEFIPS
1.2.14.2. 管理 CLI の設定
IBM JDK で FIPS 140-2 準拠の暗号の管理 CLI を設定 するには、以下のように、IBM JDK に固有の管理 CLI 設定ファイルを使用する必要があります。
例: cli-wildfly-config-ibm.xml
<configuration> <authentication-client xmlns="urn:elytron:client:1.2"> <key-stores> <key-store name="truststore" type="JKS"> <file name="/path/to/truststore"/> <key-store-clear-password password="P@ssword123"/> </key-store> </key-stores> <ssl-contexts> <ssl-context name="client-cli-context"> <trust-store key-store-name="truststore"/> <cipher-suite selector="${cipher.suite.filter}"/> <protocol names="TLSv1"/> </ssl-context> </ssl-contexts> <ssl-context-rules> <rule use-ssl-context="client-cli-context"/> </ssl-context-rules> </authentication-client> </configuration>
1.2.14.3. FIPS プロバイダー情報の確認
サーバーが使用する IBMJCEFIPS に関する情報を確認するには、-Djavax.net.debug=true
を standalone.conf
または domain.conf
ファイルに追加することでデバッグレベルのロギングを有効にします。FIPS プロバイダーの情報は、server.log
ファイルに記録されます。以下に例を示します。
04:22:45,685 INFO [stdout] (http-/127.0.0.1:8443-1) JsseJCE: Using MessageDigest SHA from provider IBMJCEFIPS version 1.7 04:22:45,689 INFO [stdout] (http-/127.0.0.1:8443-1) DHCrypt: DH KeyPairGenerator from provider from init IBMJCEFIPS version 1.7 04:22:45,754 INFO [stdout] (http-/127.0.0.1:8443-1) JsseJCE: Using KeyFactory DiffieHellman from provider IBMJCEFIPS version 1.7 04:22:45,754 INFO [stdout] (http-/127.0.0.1:8443-1) JsseJCE: Using KeyAgreement DiffieHellman from provider IBMJCEFIPS version 1.7 04:22:45,754 INFO [stdout] (http-/127.0.0.1:8443-1) DHCrypt: DH KeyAgreement from provider IBMJCEFIPS version 1.7 04:22:45,754 INFO [stdout] (http-/127.0.0.1:8443-1) DHCrypt: DH KeyAgreement from provider from initIBMJCEFIPS version 1.7
1.2.15. JVM が FIPS モードで実行されているときにマネージドドメインを起動する
各ホストコントローラーとマスタードメインコントローラーを更新して、通信に SSL/TLS を使用します。
前提条件
開始する前に、以下の前提条件を完了していることを確認してください。
マネージドドメインを実装している。
マネージドドメインの設定の詳細は、JBoss EAP設定ガイド の ドメイン管理 セクションを参照してください。
FIPS を設定している。
FIPS の設定の詳細は、Red Hat Enterprise Linux 7 以降での SSL/TLS の FIPS 140-2 暗号化の有効化 を参照してください。
- 必要な証明書をすべて作成し、ドメインコントローラーの証明書を各コントローラーのトラストストアにインポートしている。
Red Hat では、影響するすべてのパッケージで TLSv1.1 を利用するために SSLv2、SSLv3、および TLSv1.0 を明示的に無効化することを推奨しています。
マスタードメインコントローラーで、NSS データベースを PKCS11 プロバイダーとして使用するように設定された SSL/TLS セキュリティーレルムを作成します。
例: マスタードメインコントローラーのセキュリティーレルム
<security-realm name="HTTPSRealm"> <server-identities> <ssl> <engine enabled-protocols="TLSv1.1"/> <keystore provider="PKCS11" keystore-password="strongP@ssword1"/> </ssl> </server-identities> <authentication> <local default-user="\$local"/> <properties path="https-users.properties" relative-to="jboss.domain.config.dir"/> </authentication> </security-realm>
各ホストコントローラーで、認証に SSL/TLS トラストストアを使用してセキュリティーレルムを作成します。
例: 各ホストコントローラーのセキュリティーレルム
<security-realm name="HTTPSRealm"> <authentication> <truststore provider="PKCS11" keystore-password="strongP@ssword1"/> </authentication> </security-realm>
注記各ホストでこのプロセスを繰り返します。
作成したセキュリティーレルムを使用して、マスタードメインコントローラーの HTTP インターフェイスを保護します。
例: HTTP インターフェイス
<management-interfaces> <http-interface security-realm="HTTPSRealm"> <http-upgrade enabled="true"/> <socket interface="management" port="${jboss.management.http.port:9990}"/> </http-interface> </management-interfaces>
各ホストコントローラーで SSL/TLS レルムを使用して、マスタードメインコントローラーに接続します。
マスタードメインコントローラーへの接続に使用されるセキュリティーレルムを更新します。サーバーが動作していない場合に、ホストコントローラーの設定ファイル (
host.xml
、host-slave.xml
など) を変更します。例: ホストコントローラー設定ファイル
<domain-controller> <remote security-realm="HTTPSRealm"> <discovery-options> <static-discovery name="primary" protocol="${jboss.domain.master.protocol:remote}" host="${jboss.domain.master.address}" port="${jboss.domain.master.port:9990}"/> </discovery-options> </remote> </domain-controller>
各サーバーがホストコントローラーに接続する方法を更新します。
例: サーバー設定
<server name="my-server" group="my-server-group"> <ssl ssl-protocol="TLS" trust-manager-algorithm="PKIX" truststore-type="PKCS11" truststore-password="strongP@ssword1"/> </server>
マネージドドメインで双方向 SSL/TLS を設定します。
双方向 SSL/TLS を有効にするには、マスタードメインコントローラーの SSL/TLS セキュリティーレルムにトラストストア認証メソッドを追加します。以下の管理 CLI コマンドを実行します。
/host=master/core-service=management/security-realm=HTTPSRealm/authentication=truststore:add(keystore-provider="PKCS11",keystore-password="strongP@ssword1") reload --host=master
SSL サーバーアイデンティティーを持つように各ホストコントローラーのセキュリティーレルムを更新する必要もあります。以下の管理 CLI コマンドを実行します。
/host=host1/core-service=management/security-realm=HTTPSRealm/server-identity=ssl:add(keystore-provider=PKCS11, keystore-password="strongP@ssword1",enabled-protocols=["TLSv1.1"]) reload --host=host1
重要また、各ホストの証明書がドメインコントローラーのトラストストアにインポートされることを確認する必要があります。
1.2.16. Red Hat Single Sign-On での管理コンソールのセキュア化
elytron
サブシステムを使用すると、Red Hat シングルサインオンで JBoss EAP 管理コンソールをセキュア化できます。
この機能はスタンドアロンサーバーを実行する場合のみ利用でき、マネージドドメイン実行時にはサポートされません。管理 CLI をセキュアにする Red Hat Single Sign-On の使用はサポートされません。
以下の手順に従い、Red Hat Single Sign-On を設定し、JBoss EAP 管理コンソールのユーザーを認証します。
JBoss EAP 管理用の Red Hat Single Sign-On サーバーの設定
- Red Hat Single Sign-On サーバーをダウンロードしてインストールします。基本的な手順については、Red Hat Single Sign-On Getting Started Guide を参照してください。
Red Hat Single Sign-On サーバーを起動します。
この手順では、ポートオフセット
100
でサーバーを起動したことを前提とします。$ RHSSO_HOME/bin/standalone.sh -Djboss.socket.binding.port-offset=100
http://localhost:8180/auth/ で Red Hat Single Sign-On 管理コンソールにログインします。
Red Hat Single Sign-On 管理コンソールに初めてアクセスすると、初期管理ユーザーを作成するように求められます。
wildfly-infra
という名前の新規レルムを作成します。-
レルム名の横にあるドロップダウンメニューで、Add realm をクリックし、Name フィールドに
wildfly-infra
を入力し、Create をクリックします。
-
レルム名の横にあるドロップダウンメニューで、Add realm をクリックし、Name フィールドに
wildfly-console
というクライアントアプリケーションを作成します。重要このクライアントアプリケーションの名前は
wildfly-console
に する必要があります 。- Clients を選択し、Create をクリックします。
-
Client ID フィールドに
wildfly-console
を入力し、Save をクリックします。 -
表示される Settings 画面で Access Type を
public
に設定し、Valid Redirect URIs をhttp://localhost:9990/console/*
に、Web Origins をhttp://localhost:9990
に設定し、Save をクリックします。
wildfly-management
というクライアントアプリケーションを作成します。- Clients を選択し、Create をクリックします。
-
Client ID フィールドに
wildfly-management
を入力し、Save をクリックします。 -
表示される Settings 画面で、Access Type を
bearer-only
に設定し、Save をクリックします。
JBoss EAP 管理コンソールへのアクセスを付与するためのロールを作成します。
- Roles を選択して Add Role をクリックします。
Role Name フィールドに大文字で
ADMINISTRATOR
を入力し、Save をクリックします。以下の手順では、
ADMINISTRATOR
ロールを使用しますが、その他のロールもサポートされています。詳細は、JBoss EAP のセキュリティーアーキテクチャーの ロールベースのアクセス制御 を参照してください。
ユーザーを作成し、
ADMINISTRATOR
ロールを割り当てます。- Users を選択して Add user をクリックします。
-
Username フィールドに
jboss
を入力して Save をクリックします。 - Credentials タブを選択し、このユーザーのパスワードを設定します。
- Role Mappings タブを選択し、ADMINISTRATOR を選択して Add selected をクリックし、このユーザーにロールを追加します。
JBoss EAP に Red Hat Single Sign-On クライアントアダプターをインストールする
- Download the Red Hat Single Sign-On client adapter for JBoss EAP 7 from the ソフトウェアダウンロードページ から JBoss EAP 7 の Red Hat Single Sign-On クライアントアダプターをダウンロードします。
- このファイルを JBoss EAP インストールのルートディレクトリーにデプロイメントします。
adapter-elytron-install-offline.cli
スクリプトを実行し、JBoss EAP のインストールを設定します。$ EAP_HOME/bin/jboss-cli.sh --file=adapter-elytron-install-offline.cli
重要このスクリプトにより、
keycloak
サブシステムと、elytron
およびundertow
サブシステムのその他の必要なリソースがstandalone.xml
に追加されます。別の設定ファイルを使用する必要がある場合は、必要に応じてスクリプトを変更してください。
Red Hat Single Sign-On を使用するように JBoss EAP を設定する
EAP_HOME/bin/
ディレクトリーで、以下の内容を含むprotect-eap-mgmt-services.cli
という名前のファイルを作成します。# Create a realm for both JBoss EAP console and mgmt interface /subsystem=keycloak/realm=wildfly-infra:add(auth-server-url=http://localhost:8180/auth,realm-public-key=REALM_PUBLIC_KEY) # Create a secure-deployment in order to protect mgmt interface /subsystem=keycloak/secure-deployment=wildfly-management:add(realm=wildfly-infra,resource=wildfly-management,principal-attribute=preferred_username,bearer-only=true,ssl-required=EXTERNAL) # Protect HTTP mgmt interface with Keycloak adapter /core-service=management/management-interface=http-interface:undefine-attribute(name=security-realm) /subsystem=elytron/http-authentication-factory=keycloak-mgmt-http-authentication:add(security-domain=KeycloakDomain,http-server-mechanism-factory=wildfly-management,mechanism-configurations=[{mechanism-name=KEYCLOAK,mechanism-realm-configurations=[{realm-name=KeycloakOIDCRealm,realm-mapper=keycloak-oidc-realm-mapper}]}]) /core-service=management/management-interface=http-interface:write-attribute(name=http-authentication-factory,value=keycloak-mgmt-http-authentication) /core-service=management/management-interface=http-interface:write-attribute(name=http-upgrade, value={enabled=true, sasl-authentication-factory=management-sasl-authentication}) # Enable RBAC where roles are obtained from the identity /core-service=management/access=authorization:write-attribute(name=provider,value=rbac) /core-service=management/access=authorization:write-attribute(name=use-identity-roles,value=true) # Create a secure-server in order to publish the JBoss EAP console configuration via mgmt interface /subsystem=keycloak/secure-server=wildfly-console:add(realm=wildfly-infra,resource=wildfly-console,public-client=true) # reload reload
-
このファイルでの
REALM_PUBLIC_KEY
を公開鍵の値に置き換えます。この値を取得するには、Red Hat Single Sign-On 管理コンソールにログインし、wildfly-infra
レルムを選択して Realm SettingsKeys の順に選択し、Public key をクリックします。 JBoss EAP を起動します。
$ EAP_HOME/bin/standalone.sh
重要Red Hat Single Sign-On クライアントアダプターを取り付けるとき
adapter-elytron-install-offline.cli
スクリプトを変更して、standalone.xml
以外の設定ファイルを使用する場合は、その設定を使用して JBoss EAP を起動するようにしてください。protect-eap-mgmt-services.cli
スクリプトを実行します。$ EAP_HOME/bin/jboss-cli.sh --connect --file=protect-eap-mgmt-services.cli
http://localhost:9990/console/ で JBoss EAP 管理コンソールにアクセスすると、ログインのために Red Hat Single Sign-On にリダイレクトされ、認証に成功したときに JBoss EAP 管理コンソールにリダイレクトされます。