7.5. SSL 設定の移行

7.5.1. 簡単な SSL 設定の Elytron への移行

セキュリティーレルムを使用して JBoss EAP サーバーへの HTTP 接続をセキュアにした場合、本セクションの情報を使用してその設定を Elytron に移行できます。

ここで使用する例は、以下の keystoresecurity-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 を使用して同じ設定を実現します。

  1. キーストアと暗号化されたパスワードの場所を指定する key-storeelytron サブシステムに設定します。このコマンドは、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)
  2. 前のステップで定義された key-store、エイリアス、およびキーのパスワードを指定する key-managerelytron サブシステムに作成します。

    /subsystem=elytron/key-manager=LocalhostKeyManager:add(key-store=LocalhostKeyStore,alias-filter=server,credential-reference={clear-text="key_password"})
  3. 前のステップで定義した key-manager を参照する server-ssl-contextelytron サブシステムに作成します。

    /subsystem=elytron/server-ssl-context=LocalhostSslContext:add(key-manager=LocalhostKeyManager)
  4. https-listener をレガシー security-realm から新規作成された Elytron ssl-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
  5. サーバーをリロードします。

    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 SecurityElytron 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

以下の手順に従って、有効な証明書とプライベートキーを持たないユーザーが Elytron を使用してサーバーにアクセスしないようにサーバーを設定します。

  1. キーストアと暗号化されたパスワードの場所を指定する key-storeelytron サブシステムに設定します。このコマンドは、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)
  2. トラストストアと暗号化されたパスワードの場所を指定する key-storeelytron サブシステムに設定します。このコマンドは、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)
  3. 前のステップで定義された LocalhostKeyStore キーストア、エイリアス、およびキーのパスワードを指定する key-managerelytron サブシステムに作成します。

    /subsystem=elytron/key-manager=LocalhostKeyManager:add(key-store=LocalhostKeyStore,alias-filter=server,credential-reference={clear-text="key_password"})
  4. 前のステップで作成されたトラストストアの key-store を指定する trust-managerelytron サブシステムに作成します。

    /subsystem=elytron/trust-manager=TrustManager:add(key-store=TrustStore)
  5. 前のステップで定義した key-manager の参照、trust-manager 属性の設定、およびクライアント認証の有効化を行う server-ssl-contextelytron サブシステムに作成します。

    /subsystem=elytron/server-ssl-context=LocalhostSslContext:add(key-manager=LocalhostKeyManager,trust-manager=TrustManager,need-client-auth=true)
  6. https-listener をレガシー security-realm から新規作成された Elytron ssl-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
  7. サーバーをリロードします。

    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:10.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>