7.5. SSL 設定の移行
7.5.1. 簡単な SSL 設定の Elytron への移行
セキュリティーレルムを使用して JBoss EAP サーバーへの HTTP 接続をセキュアにした場合、本セクションの情報を使用してその設定を Elytron に移行できます。
ここで使用する例は、以下の keystore が security-realm に設定されていることを仮定します。
例: セキュリティーレルムキーストアを使用した SSL 設定
<security-realm name="ApplicationRealm">
<server-identities>
<ssl>
<keystore path="server.keystore" relative-to="jboss.server.config.dir" keystore-password="keystore_password" alias="server" key-password="key_password" />
</ssl>
</server-identities>
</security-realm>
以下の手順に従って、Elytron を使用して同じ設定を実現します。
キーストアと暗号化されたパスワードの場所を指定する
key-storeをelytronサブシステムに設定します。このコマンドは、keytool コマンドを使用してキーストアが生成され、そのタイプがJKSであることを仮定しています。/subsystem=elytron/key-store=LocalhostKeyStore:add(path=server.keystore,relative-to=jboss.server.config.dir,credential-reference={clear-text="keystore_password"},type=JKS)前のステップで定義された
key-store、エイリアス、およびキーのパスワードを指定するkey-managerをelytronサブシステムに作成します。/subsystem=elytron/key-manager=LocalhostKeyManager:add(key-store=LocalhostKeyStore,alias-filter=server,credential-reference={clear-text="key_password"})前のステップで定義した
key-managerを参照するserver-ssl-contextをelytronサブシステムに作成します。/subsystem=elytron/server-ssl-context=LocalhostSslContext:add(key-manager=LocalhostKeyManager)
https-listenerをレガシーsecurity-realmから新規作成された Elytronssl-contextに切り替えます。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=LocalhostSslContext) run-batch
サーバーをリロードします。
reload
これにより、サーバー設定ファイルの elytron サブシステム設定が以下のようになります。
<subsystem xmlns="urn:wildfly:elytron:4.0" ...>
...
<tls>
<key-stores>
<key-store name="LocalhostKeyStore">
<credential-reference clear-text="keystore_password"/>
<implementation type="JKS"/>
<file path="server.keystore" relative-to="jboss.server.config.dir"/>
</key-store>
</key-stores>
<key-managers>
<key-manager name="LocalhostKeyManager" key-store="LocalhostKeyStore" alias-filter="server">
<credential-reference clear-text="key_password"/>
</key-manager>
</key-managers>
<server-ssl-contexts>
<server-ssl-context name="LocalhostSslContext" key-manager="LocalhostKeyManager"/>
</server-ssl-contexts>
</tls>
</subsystem>
これにより、サーバー設定ファイルの undertow サブシステム設定が以下のようになります。
<https-listener name="https" socket-binding="https" ssl-context="LocalhostSslContext" enable-http2="true"/>
詳細は、『How to Configure Server Security』の 「Elytron Subsystem」および「How to Secure the Management Interfaces」を参照してください。
7.5.2. CLIENT-CERT SSL 認証の Elytron への移行
CLIENT-CERT SSL 認証を有効にするには、truststore 要素をauthentication 要素に追加します。
<security-realm name="ManagementRealm">
<server-identities>
<ssl>
<keystore path="server.keystore" relative-to="jboss.server.config.dir" keystore-password="KEYSTORE_PASSWORD" alias="server" key-password="key_password" />
</ssl>
</server-identities>
<authentication>
<truststore path="server.truststore" relative-to="jboss.server.config.dir" keystore-password="TRUSTSTORE_PASSWORD" />
<local default-user="$local"/>
<properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/>
</authentication>
</security-realm>
この設定では、CLIENT-CERT 認証が発生しない場合、クライアントをフォールバックし、ローカルメカニズムまたは username/password 認証メカニズムのいずれかを使用することができます。CLIENT-CERT ベースの認証を強制するには、local および properties 要素を削除します。
レガシー truststore の使用方法は 2 つあります。
- CA のみが含まれるレガシー truststore
-
クライアントの証明書が含まれるレガシー
truststore
CA のみが含まれるレガシー truststore
以下の手順に従って、有効な証明書とプライベートキーを持たないユーザーが Elytron を使用してサーバーにアクセスしないようにサーバーを設定します。
キーストアと暗号化されたパスワードの場所を指定する
key-storeをelytronサブシステムに設定します。このコマンドは、keytool コマンドを使用してキーストアが生成され、そのタイプがJKSであることを仮定しています。/subsystem=elytron/key-store=LocalhostKeyStore:add(path=server.keystore,relative-to=jboss.server.config.dir,credential-reference={clear-text="keystore_password"},type=JKS)トラストストアと暗号化されたパスワードの場所を指定する
key-storeをelytronサブシステムに設定します。このコマンドは、keytool コマンドを使用してキーストアが生成され、そのタイプがJKSであることを仮定しています。/subsystem=elytron/key-store=TrustStore:add(path=server.truststore,relative-to=jboss.server.config.dir,credential-reference={clear-text="truststore_password"},type=JKS)前のステップで定義された
LocalhostKeyStoreキーストア、エイリアス、およびキーのパスワードを指定するkey-managerをelytronサブシステムに作成します。/subsystem=elytron/key-manager=LocalhostKeyManager:add(key-store=LocalhostKeyStore,alias-filter=server,credential-reference={clear-text="key_password"})前のステップで作成されたトラストストアの
key-storeを指定するtrust-managerをelytronサブシステムに作成します。/subsystem=elytron/trust-manager=TrustManager:add(key-store=TrustStore)
前のステップで定義した
key-managerの参照、trust-manager属性の設定、およびクライアント認証の有効化を行うserver-ssl-contextをelytronサブシステムに作成します。/subsystem=elytron/server-ssl-context=LocalhostSslContext:add(key-manager=LocalhostKeyManager,trust-manager=TrustManager,need-client-auth=true)
https-listenerをレガシーsecurity-realmから新規作成された Elytronssl-contextに切り替えます。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=LocalhostSslContext) run-batch
サーバーをリロードします。
reload
これにより、サーバー設定ファイルの elytron サブシステム設定が以下のようになります。
<subsystem xmlns="urn:wildfly:elytron:4.0"...>
...
<tls>
<key-stores>
<key-store name="LocalhostKeyStore">
<credential-reference clear-text="keystore_password"/>
<implementation type="JKS"/>
<file path="server.keystore" relative-to="jboss.server.config.dir"/>
</key-store>
<key-store name="TrustStore">
<credential-reference clear-text="truststore_password"/>
<implementation type="JKS"/>
<file path="server.truststore" relative-to="jboss.server.config.dir"/>
</key-store>
</key-stores>
<key-managers>
<key-manager name="LocalhostKeyManager" key-store="LocalhostKeyStore" alias-filter="server">
<credential-reference clear-text="key_password"/>
</key-manager>
</key-managers>
<trust-managers>
<trust-manager name="TrustManager" key-store="TrustStore"/>
</trust-managers>
<server-ssl-contexts>
<server-ssl-context name="LocalhostSslContext" need-client-auth="true" key-manager="LocalhostKeyManager" trust-manager="TrustManager"/>
</server-ssl-contexts>
</tls>
</subsystem>
これにより、サーバー設定ファイルの undertow サブシステム設定が以下のようになります。
<subsystem xmlns="urn:jboss:domain:undertow:7.0"> ... <https-listener name="https" socket-binding="https" ssl-context="LocalhostSslContext" enable-http2="true"/> ... </subsystem>
レルムおよびドメイン
事前定義された Elytron ManagementDomain セキュリティードメインと ManagementRealm セキュリティーレルムを使用できるようにするため、ユーザーは標準のプロパティーファイルに格納されます。
<security-domains>
<security-domain name="ManagementDomain" default-realm="ManagementRealm" permission-mapper="default-permission-mapper">
<realm name="ManagementRealm" role-decoder="groups-to-roles"/>
<realm name="local"/>
</security-domain>
</security-domains>
<security-realms>
<properties-realm name="ManagementRealm">
<users-properties path="mgmt-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="ManagementRealm"/>
<groups-properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>
</properties-realm>
</security-realms>セキュリティーレルムは 2 つの状況で使用されます。
- 証明書の認証に失敗したとき、セキュリティーレルムはパスワードのフォールバックで使用されます。
- パスワードと証明書に対する承認が完了したとき、レルムは各ユーザーのロールを提供します。
そのため、すべてのクライアント証明書に対してユーザーがセキュリティーレルムに存在する必要があります。
プリンシパルデコーダー
証明書認証が使用され、セキュリティーレルムがユーザー名を許可してアイデンティティーを解決する場合、クライアント証明書から username を取得する方法の定義が必要です。
この場合、証明書サブジェクトで CN 属性が使用されます。
/subsystem=elytron/x500-attribute-principal-decoder=x500-decoder:add(attribute-name=CN)
HTTP 認証ファクトリー
HTTP 接続では、以前定義したリソースを使用して HTTP 認証ファクトリーが定義されます。これは、CLIENT_CERT および DIGEST 認証をサポートするために設定されます。
プロパティーレルムはパスワードのみを検証し、クライアント証明書を検証できないため、最初に設定メカニズムのファクトリーを追加する必要があります。これは、セキュリティーレルムに対する証明書の検証を無効にします。
/subsystem=elytron/configurable-http-server-mechanism-factory=configured-cert:add(http-server-mechanism-factory=global, properties={org.wildfly.security.http.skip-certificate-verification=true})HTTP 認証は次のように作成できます。
./subsystem=elytron/http-authentication-factory=client-cert-digest:add(http-server-mechanism-factory=configured-cert,security-domain=ManagementDomain,mechanism-configurations=[{mechanism-name=CLIENT_CERT,pre-realm-principal-transformer=x500-decoder},{mechanism-name=DIGEST, mechanism-realm-configurations=[{realm-name=ManagementRealm}]}])上記のコマンドの結果は次のとおりです。
<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
...
<http>
...
<http-authentication-factory name="client-cert-digest" http-server-mechanism-factory="configured-cert" security-domain="ManagementDomain">
<mechanism-configuration>
<mechanism mechanism-name="CLIENT_CERT" pre-realm-principal-transformer="x500-decoder"/>
<mechanism mechanism-name="DIGEST">
<mechanism-realm realm-name="ManagementRealm"/>
</mechanism>
</mechanism-configuration>
</http-authentication-factory>
...
<configurable-http-server-mechanism-factory name="configured-cert" http-server-mechanism-factory="configured-cert">
<properties>
<property name="org.wildfly.security.http.skip-certificate-verification" value="true"/>
</properties>
</configurable-http-server-mechanism-factory>
...
</http>
...
</subsystem>