第18章 Tomcat Connector のキーストアパスワードの暗号化
JBoss Web は Apache Tomcat に基づいています。
Tomcat で SSL を使用するにはセキュアなコネクタが必要です。これはキーストア / 信頼ストアのパスワードは Tomcat の
server.xml
ファイルのコネクタ要素の属性として渡されないことを意味しています。
キーストア、信頼ストア、パスワードベースの暗号化に対応する JaasSecurityDomain に関する基礎を理解することが推奨されます。
サポート情報および関連手順については 13章セキュアリモートパスワードプロトコル と 17章データソースのパスワードの暗号化 を参照してください。
手順18.1 Tomcat Container のキーストアのパスワードの暗号化
コネクタ要素を追加します
$JBOSS_HOME/server/$PROFILE/deploy/jbossweb.sar
のserver.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>
.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 文字以上である必要があります。暗号化されたパスワードを生成します
<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
ファイルがこのディレクトリに保存されます。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
jboss-service.xml を更新し、コネクタを追加します
$JBOSS_HOME/server/
に移動し、次のコードブロックを$PROFILE
/deploy/jbossweb.sar/META-INFjboss-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>
<depends> タグを Tomcat サービスに追加します
$JBOSS_HOME/server/$PROFILE/deploy/jbossweb.sar
に移動します。server.xml
を開き、次の <depends> 要素をファイルの最後に追加します。<depends>jboss.security:service=SecurityDomain</depends> </mbean> </server>
*-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 により書き込み可能であることに注意してください。