Webの通信経路を暗号化するときにはSSLを使いますが,TomcatでSSLを使うときの鍵の作り方と設定をまとめます。
利用しているJ2SEやTomcatのバージョンによって準備が異なります。
J2SEについては,バージョン1.4以降ならJSSEが含まれていますので特段の準備はいりませんが,それ以前なら別途JSSEが必要です。個別にダウンロードする際は次のURLから入手できます。
Tomcatはバージョン5系列の例で紹介しますが,4.1や4.0でもほぼ同じです。
TomcatのSSLコネクタを有効にする必要があります。
TomcatのインストールディレクトリをCATALINA_HOMEとすると,CATALINA_HOME/conf/server.xmlに設定します。このXMLファイルを開いてポート番号として8443が指定されたConnector要素を探します。デフォルトではコメントになっています。
<!-- <Connector port="8443" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" debug="0" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" /> -->
Connector要素の前後にあるコメント記号を削除して,コネクタを有効にします。次に,8443になっているポート番号も,SSLで一般的な443にしておきましょう。参考まで,Tomcat 4.1系列の場合は次のようになっていると思います。
<!-- <Connector className="org.apache.catalina.connector.http.HttpConnector" port="8443" minProcessors="5" maxProcessors="75" -->
この場合も,コメント記号を削除してポート番号を443にします。
同じ設定ファイル中に,redirectPort属性としていくつか8443を設定している箇所があります。これもすべて443に変更します。
鍵を作ります。これにはJ2SEに含まれているkeytoolツールを使います。次のように入力して起動します。
> keytool -genkey -alias tomcat -keyalg RSA
起動したらコマンドラインで対話形式になっていますので,質問に1つずつ答えていきます。鍵の発行者に関する情報を入力していきます。次の例では太字の部分が入力箇所です。
キーストアのパスワードを入力してください: changeit 姓名を入力してください。 [Unknown]: yamada 組織単位名を入力してください。 [Unknown]: JAVA Developer 組織名を入力してください。 [Unknown]: Sbp 都市名または地域名を入力してください。 [Unknown]: Akasaka 州名または地方名を入力してください。 [Unknown]: Tokyo この単位に該当する 2 文字の国番号を入力してください。 [Unknown]: JP CN=yamada, OU=JAVA Developer, O=Sbp, L=Akasaka, ST=Tokyo, C=JP でよろしいですか? [no]: yes <tomcat> の鍵パスワードを入力してください。 (キーストアのパスワードと同じ場合は RETURN を押してください): changeit
この中で,「changeit」というのはデフォルトの鍵とキーストアのパスワードです。デフォルトで「changeit」になっています。パスワードを変えた場合は,先ほどの設定ファイルのConnector要素の子要素(Factory)を追加してパスワードを指定しなければなりません。
パスワード以外の入力は,あまり神経質にならなくてもかまいません。
これでユーザーのディレクトリにキーができています。キーストアのデフォルトは,Windowsなら"%USERPROFILE%"\.keystoreです。UNIXなら~/.keystoreとなります。この中に鍵が追加されているはずです。あとは,Tomcatを起動したら大丈夫でしょう。
なお,キーストアを保存したディレクトリを移動したい場合なども設定を変える必要があります。次のサンプルは,キーストアのパスワードとディレクトリを指定した例で、Connector要素の子としてFactory要素を記述します。
<Factory className="org.apache.catalina.net.SSLServerSocketFactory" keystorePass="myPass" keystoreFile="c:/usr/src/java/servlet/.keystore"
JAVA Developerより毎週Java Tipsをお届けしましょう。バックナンバーもよろしく。
Copyright(C) 2010 SOFTBANK Creative Inc. All Right Reserved.