1.4.2.2. Elytron サブシステムを使用してアプリケーションに対して双方向 SSL/TLS を有効化する

  1. クライアントキーストアを取得または生成します。

    $ keytool -genkeypair -alias client -keyalg RSA -keysize 1024 -validity 365 -keystore client.keystore.jks -dname "CN=client" -keypass secret -storepass secret
  2. クライアント証明書をエクスポートします。

    keytool -exportcert  -keystore client.keystore.jks -alias client -keypass secret -storepass secret -file /path/to/client.cer
  3. デプロイしたアプリケーションに対して双方向 SSL/TLS を有効にします。

    JBoss EAP では、デプロイされたアプリケーション用の双方向 SSL/TLS は、security コマンドまたは elytron サブシステムコマンドを使用して有効にできます。

    1. セキュリティーコマンドの使用

      security enable-ssl-http-server コマンドを使用すると、デプロイされたアプリケーションに双方向 SSL/TLS を有効にできます。

      注記

      以下の例では、信頼チェーンが存在しないので、証明書は検証されません。信頼された証明書を使用している場合、クライアントの証明書は問題なく検証できます。

      例: ウィザードの使用

      security enable-ssl-http-server --interactive
      
      Please provide required pieces of information to enable SSL:
      Key-store file name (default default-server.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 認証を完了するには、サーバーの証明書をクライアントトラストストアにインポートし、クライアント証明書を表示するようにクライアントを設定する必要があります。

    2. elytron サブシステムコマンドの使用

      JBoss EAP では、undertow サブシステムとともに elytron サブシステムを使用してデプロイされたアプリケーションで双方向 SSL/TLS を有効にすることもできます。

      1. キーストアを取得または生成します。

        JBoss EAP で双方向 SSL/TLS を有効化する前に、使用する予定のキーストア、トラストストア、および証明書を取得または生成する必要があります。

        1. サーバーキーストアを作成します。

          /subsystem=elytron/key-store=twoWayKS:add(path=/PATH/TO/server.keystore.jks,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 は相対パスを指定します。

          /subsystem=elytron/key-store=twoWayKS:add(path=server.keystore.jks,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=JKS)
        2. サーバー証明書をエクスポートします。

          /subsystem=elytron/key-store=twoWayKS:export-certificate(alias=localhost,path=/path/to/server.cer,pem=true)
      2. サーバートラストストアのキーストアを作成し、クライアント証明書をサーバートラストストアにインポートします。

        注記

        以下の例では、信頼チェーンが存在しないので、証明書は検証されません。信頼された証明書を使用している場合、クライアントの証明書は問題なく検証できます。

        /subsystem=elytron/key-store=twoWayTS:add(path=/path/to/server.truststore.jks,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()
      3. キーストア key-store を参照する key-manager を設定します。

        /subsystem=elytron/key-manager=twoWayKM:add(key-store=twoWayKS, algorithm="SunX509", credential-reference={clear-text=secret})
        重要

        使用している JDK によるキーマネージャーアルゴリズムを知る必要があります。たとえば、Sun valueFrom を使用する JDK では PKIX アルゴリズムおよび SunX 509 アルゴリズムを利用できます。

        以下のコマンド例は、キーマネージャーアルゴリズムに SunX509 を使用します。

      4. トラストストア key-store を参照する trust-manager を設定します。

        /subsystem=elytron/trust-manager=twoWayTM:add(key-store=twoWayTS, algorithm="SunX509")
        重要

        使用している JDK によるキーマネージャーアルゴリズムを知る必要があります。たとえば、Sun valueFrom を使用する JDK では PKIX アルゴリズムおよび SunX 509 アルゴリズムを利用できます。

        上記のコマンド例は、キーマネージャーアルゴリズムに SunX509 を使用します。

      5. key-managertrust-manager、を参照する server-ssl-context を設定し、クライアント認証を有効化します。

        /subsystem=elytron/server-ssl-context=twoWaySSC:add(key-manager=twoWayKM, protocols=["TLSv1.2"], trust-manager=twoWayTM, need-client-auth=true)
        重要

        利用できるようにする必要のある SSL/TLS プロトコルを決定する必要があります。上記のコマンド例は TLSv1.2 を使用します。cipher-suite-filter 引数を使用して、許可される暗号スイートを指定でき、use-cipher-suites-order 引用して、サーバーの暗号スイートの順序を許可します。use-cipher-suites-order 属性はデフォルトで true に設定されます。これは、レガシー security サブシステムの動作とは異なります。その動作は、デフォルトで、クライアント暗号スイートの順序を許可します。

        警告

        Red Hat では、影響するすべてのパッケージで TLSv1.1 または TLSv1.2 を利用するために SSLv2、SSLv3、および TLSv1.0 を明示的に無効化することを推奨しています。

      6. https-listener が SSL 設定でレガシーセキュリティーレルムを使用するように設定されているかどうかを確認します。

        /subsystem=undertow/server=default-server/https-listener=https:read-attribute(name=security-realm)
        {
            "outcome" => "success",
            "result" => "ApplicationRealm"
        }

        上記のコマンドは、https-listener が SSL 設定の ApplicationRealm レガシーセキュリティーレルムを使用するように設定されていることを示しています。Undertow は、elytron サブシステムではレガシーセキュリティーレルムと ssl-context を同時に参照できません。したがって、レガシーセキュリティーレルムへの参照を削除する必要があります。

        注記

        結果が undefined である場合は、次の手順でセキュリティーレルムへの参照を削除する必要はありません。

      7. レガシーセキュリティーレルムへの参照を削除し、https-listener を Elytron の 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=twoWaySSC)
        run-batch
      8. サーバーをリロードします。

        reload
        注記

        双方向 SSL/TLS 認証を完了するには、サーバーの証明書をクライアントトラストストアにインポートし、クライアント証明書を表示するようにクライアントを設定する必要があります。

        $ keytool -importcert -keystore client.truststore.jks -storepass secret -alias localhost -trustcacerts -file /path/to/server.cer
      9. クライアント証明書を使用するようにクライアントを設定します。

        双方向 SSL / TLS 認証を完了するには、信頼されたクライアント証明書をサーバーに提示するようにクライアントを構成する必要があります。たとえば、ブラウザーを使用している場合は、信頼された証明書をブラウザーの信頼ストアにインポートする必要があります。

        この手順では、双方向 SSL/TLS を強制しますが、アプリケーションの元の認証方法は変更されません。

        元の認証方法を変更する場合は、JBoss EAP『 How to Configure Identity Management』の「 Configure Authentication with Certificates 」を参照してください。

双方向 SSL/TLS がアプリケーション用に有効化されました。

注記

disable-ssl-http-server コマンドを使用すると、デプロイされたアプリケーションの双方向 SSL/TLS を無効にできます。

security disable-ssl-http-server

このコマンドでは、Elytron リソースは削除されません。SSL 設定に ApplicationRealm レガシーセキュリティーレルムを使用するようにシステムを設定します。