JBoss4.0.3SP1でのサーバ証明書設定

環境

JBossHTTPSをしばらく使用していましたが、SSLHandshakeException が発生するようになったため、設定を見直してみました。なるべくJBossのデフォルトの設定を生かす形にしています。
なお、JBossのインストール先を「%JBOSS_HOME%」、JDK/JREのインストール先を「%JAVA_HOME%」という環境変数に設定しているものとします。
また、問題を見つけた方は是非激しくツッコミお願いいたします

手順

とした場合

C:\>keytool -genkey -alias rmi+ssl -keyalg RSA -keystore chap8.keystore -validity 3650
キーストアのパスワードを入力してください:  rmi+ssl
姓名を入力してください。
  [Unknown]:localhost
組織単位名を入力してください。
  [Unknown]:
組織名を入力してください。
  [Unknown]:
都市名または地域名を入力してください。
  [Unknown]:
州名または地方名を入力してください。
  [Unknown]:
この単位に該当する 2 文字の国番号を入力してください。
  [Unknown]:
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown でよろしいですか?
  [no]:  y

<rmi+ssl> の鍵パスワードを入力してください。
        (キーストアのパスワードと同じ場合は RETURN を押してください):

C:\>
    • 出力された「chap8.keystore」を「%JBOSS_HOME%\server\default\conf」にコピーします
  • ローカルCAによる証明書を信頼させる(JDKの cacerts に追加)
    • クライアント証明の作成
      • クライアント証明書は一時的に使用するだけなのでファイル名は任意。ここでは「client.cer」としています。
      • キーストアのパスワードは「rmi+ssl」としています(%JBOSS_HOME%/server/default/deploy/jbossweb-tomcat55.sar/server.xml の「SSL/TLS Connector configuration ...」にある「keystorePass」の設定値とあわせる)。
keytool -export -alias rmi+ssl -keystore clientKeys -file client.cer -keystore %JBOSS_HOME%/server/default/conf\chap8.keystore
キーストアのパスワードを入力してください:  rmi+ssl
証明書がファイル <client.cer> に保存されました。
    • キーストアへの証明書の登録
      • JDKのキーストアのデフォルトパスワードは「changeit」なので、それを使用しています。
keytool -import -alias rmi+ssl -file client.cer -noprompt -trustcacerts -keystore %JAVA_HOME%/jre/lib/security/cacerts
キーストアのパスワードを入力してください:  changeit
証明書がキーストアに追加されました。
      • キーストアへの証明書の登録時にエラーになる場合
      • 既にキーストアに存在すると言われた場合は、以下の手順で削除してから再度追加を行う
keytool -delete -alias rmi+ssl -keystore %JAVA_HOME%/jre/lib/security/cacerts
キーストアのパスワードを入力してください:  changeit
    • 以上で、%JAVA_HOME%\jre\lib\security\cacerts に証明書が追加され、ローカルCAによる証明書を信頼することになります。
    • なお、当然のことながら %JBOSS_HOME%/server/default/deploy/jbossweb-tomcat55.sar/server.xml でデフォルトでコメントアウトされているHTTPSの設定を有効にしておくこと。