第18章 Tomcat Connector のキーストアパスワードの暗号化

JBoss Web は Apache Tomcat に基づいています。
Tomcat で SSL を使用するにはセキュアなコネクタが必要です。これはキーストア / 信頼ストアのパスワードは Tomcat の server.xml ファイルのコネクタ要素の属性として渡されないことを意味しています。
キーストア、信頼ストア、パスワードベースの暗号化に対応する JaasSecurityDomain に関する基礎を理解することが推奨されます。
サポート情報および関連手順については 13章セキュアリモートパスワードプロトコル17章データソースのパスワードの暗号化 を参照してください。

手順18.1 Tomcat Container のキーストアのパスワードの暗号化

  1. コネクタ要素を追加します

    $JBOSS_HOME/server/$PROFILE/deploy/jbossweb.sarserver.xml にコネクタ要素を追加します。
      
    <!-- SSL/TLS Connector with encrypted keystore password configuration  -->
    <Connector port="8443" address="${jboss.bind.address}"
       maxThreads="100" minSpareThreads="5" maxSpareThreads="15"
       scheme="https" secure="true" clientAuth="true"
       sslProtocol="TLS"
       securityDomain="java:/jaas/encrypt-keystore-password"
       SSLImplementation="org.jboss.net.ssl.JBossImplementation" >
    </Connector>
    .
  2. JaasSecurityDomain MBean を設定します

    $JBOSS_HOME/server/$PROFILE/deploy/security-service.xml ファイルの JaasSecurityDomain MBean を設定します。
    ファイルが存在していない場合は作成する必要があります。例のコードは、ファイルが存在していない場合の必要なコンテンツを説明しています。すでに security-service.xml がある場合は、ファイルに <mbean> 要素ブロックを追加します。
    <server>
       <mbean code="org.jboss.security.plugins.JaasSecurityDomain"
          name="jboss.security:service=PBESecurityDomain">
          <constructor>
             <arg type="java.lang.String" value="encrypt-keystore-password"></arg>
          </constructor>
          <attribute name="KeyStoreURL">resource:localhost.keystore</attribute>
          <attribute name="KeyStorePass">{CLASS}org.jboss.security.plugins.FilePassword:${jboss.server.home.dir}/conf/keystore.password</attribute>
          <attribute name="Salt">welcometojboss</attribute>
          <attribute name="IterationCount">13</attribute>
       </mbean>
    </server>
    Salt と IterationCount は暗号化されたパスワードの強度を定義する変数であるため、表示されているものから変更できます。新しい値を記録し、暗号化されたパスワードを生成するときに使用するようにしてください。

    注記

    Salt は 8 文字以上である必要があります。
  3. 暗号化されたパスワードを生成します

    <mbean> 設定はキーストアが jboss-as/server/$PROFILE/conf/localhost.keystore ファイルに保存されていることを指定します。<mbean> は暗号化されたパスワードファイルが jboss-as/server/$PROFILE/conf/keystore.password ファイルに保存されていることも指定します。
    localhost.keystore ファイルを作成する必要があります。
    jboss-as/server/$PROFILE/conf ディレクトリで次のコマンドを実行します。
    [conf]$ java -cp $JBOSS_HOME/lib/jbosssx.jar \org.jboss.security.plugins.FilePassword welcometojboss 13 unit-tests-server keystore.password
    このコマンドは jbosssx.jar をクラスパス (-cp) として FilePassword をセキュリティプラグインとして使用し、unit-tests-server と設定されたパスワードを持つ keystore.password ファイルを作成します。keystore.password ファイルを作成するパーミッションがあるか確認するには、JaasSecurityDomain の <mbean> <attribute> 要素で設定された salt と iteration パラメータを提供します。
    /conf ディレクトリでこのコマンドを実行することで、keystore.password ファイルがこのディレクトリに保存されます。
  4. Tomcat service MBean を更新します

    $JBOSS_HOME/server/$PROFILE/deploy/jbossweb.sar/META-INF に移動します。
    jboss-beans.xml を開き、次の <depends> タグをファイルの後方に追加します。<depends> タグを追加すると、Tomcat は jboss.security:service=PBESecurityDomain の後に開始しなければならないことを指定します。
    <!-- Transaction manager for unfinished transaction checking in the CachedConnectionValve -->
    <depends>jboss:service=TransactionManager</depends>
    
    <depends>jboss.security:service=PBESecurityDomain</depends>
    
    <!-- Inject the TomcatDeployer -->
    
    

例18.1 pkcs12 キーストアの JaasSecurityDomain の定義

手順18.1「Tomcat Container のキーストアのパスワードの暗号化」 に基づき、Tomcat Connector で参照された pkcs12 キーストアコンテナは次の例のようになります。
<mbean code="org.jboss.security.plugins.JaasSecurityDomain"
      name="jboss.security:service=PBESecurityDomain">
    <constructor>
       <arg type="java.lang.String" value="encrypt-keystore-password"></arg>
    </constructor>
    <attribute name="KeyStoreType">pkcs12</attribute>
    <attribute name="KeyStoreURL">resource:localhost.keystore</attribute>
    <attribute name="KeyStorePass">{CLASS}org.jboss.security.plugins.FilePassword:${jboss.server.home.dir}/conf/keystore.password</attribute>
    <attribute name="Salt">welcometojboss</attribute>
    <attribute name="IterationCount">13</attribute>
</mbean>

18.1. 中程度のセキュリティユースケース

ユーザーはキーストアパスワードの暗号化は望みませんが、それを (server.xml の外に) 外在させるか事前定義された JaasSecurityDomain の使用を望みます。

手順18.2 事前定義された JaasSecurityDomain

  1. jboss-service.xml を更新し、コネクタを追加します

    $JBOSS_HOME/server/ $PROFILE /deploy/jbossweb.sar/META-INF に移動し、次のコードブロックを jboss-service.xml ファイルに追加します。
    <mbean code="org.jboss.security.plugins.JaasSecurityDomain"
          name="jboss.security:service=SecurityDomain">
          <constructor>
             <arg type="java.lang.String" value="jbosstest-ssl"></arg>
          </constructor>
          <attribute name="KeyStoreURL">resource:localhost.keystore</attribute>
          <attribute name="KeyStorePass">unit-tests-server</attribute>
       </mbean>
    
  2. <depends> タグを Tomcat サービスに追加します

    $JBOSS_HOME/server/$PROFILE/deploy/jbossweb.sar に移動します。
    server.xml を開き、次の <depends> 要素をファイルの最後に追加します。
    <depends>jboss.security:service=SecurityDomain</depends>
       </mbean>
    </server>
    
  3. *-service.xml ファイルの JaasSecurityDomain MBean を定義します

    デプロイディレクトリの security-service.xml を例にあげます。
     <mbean code="org.jboss.security.plugins.JaasSecurityDomain"
         name="jboss.security:service=SecurityDomain">
         <constructor>
            <arg type="java.lang.String" value="jbosstest-ssl"></arg>
         </constructor>
         <attribute name="KeyStoreURL">resource:localhost.keystore</attribute>
         <attribute name="KeyStorePass">unit-tests-server</attribute>
      </mbean>
    

注記

このエラーが発生した場合は、キーストアファイルは JBoss Enterprise Application Platform を実行しているユーザー ID により書き込み可能であることに注意してください。