Tomcatでは、わずかな設定でSSLを利用できるようになります。ここではOSにLinuxを使い、データベース管理システム(DBMS)で管理するユーザー情報にアクセスする形とします。
- TomcatとJ2SEの設定 -
TomcatでSSLを利用するには、TomcatとJ2SEの両方を設定します。以下、J2SEをインストールしたディレクトリを“$JAVA_HOME”、Tomcatをインストールしたディレクトリを“$TOMCAT_HOME”として説明します。
1. |
ライブラリのコピー
$JAVA_HOME/jre/libにあるJ2SEのライブラリjsse.jarを、$TOMCAT_HOME/libディレクトリにコピーします。 |
2. |
キーストアの生成
キーストア(key store)とは、秘密鍵とそれに対応する公開鍵のX.509証明書を保持するデータベースで、パスワードによって保護されます。厳密な認証を行うなら、CA(認証局)の証明書が必要です。
キーストアを生成するには、J2SEで提供されるkeytoolというプログラム($JAVA_HOME/binにインストールされています)を、以下のようなコマンドラインで起動します。
keytool -genkey -alias tomcat -keyalg RSA
起動すると、最初にパスワードの入力を求められるので、“changeit”と入力します。これによって、キーストアを書き換えることができます。新たに生成した鍵のパスワードは、別途指定できます。
順次表示されるプロンプトに対して、名前(主体名)、組織単位、組織名、都市名などを入力すれば、最後に以下のような確認メッセージが表示されます(組織名などの情報はあくまで一例です)。
CN=technido, OU=Java Software Division,
O="Technido Industry co., ltd.",
L=KOBE, ST=HYOGO, C=JP でよろしいですか?
ここで“yes”と入力すれば入力が確定するので、最後に
<tomcat> の鍵パスワードを入力してください。
というプロンプトに対して、生成した鍵のパスワードを入力して完了です。 |
3. |
設定ファイルの書き換え
Tomcatの設定用XMLファイル“$TOMCAT_HOME/conf/server.xml”の“Connector”エレメントには、SSLを使用するための設定(HTTPSプロトコルの設定)があらかじめ記述されていますが、インストール直後の状態ではこの箇所がコメントアウトされています。
このファイルをエディタで開いて該当箇所のコメント記号を削除すれば、SSLの利用が有効になります。リスト1を参照してください。 |
リスト1:server.xmlのHTTPS定義を有効にする
- データベースの準備 -
ユーザー情報は、データベースのテーブル(表)に記録します。Javaでデータベースを扱うためには、JDBCの設定が必要です。利用するデータベース管理システム(DBMS)は、JDBCで利用できるものなら何でも構いません。
Tomcatでは、ユーザー情報を個別のユーザーとそのユーザーの属するロール、ユーザーとロールの組み合わせの3つの情報として管理します。ロール(role)とは「役割、任務」を意味し、ユーザーを権限ごとにグループ化する役目を持っています。
ユーザー情報は、以下の3つのテーブル(表)を生成して管理します。以下に掲げるテーブルのフィールド構成は、MySqlのデータ型を前提としています。異なるDBMSを使う場合は、データ型や主キーの設定などを、使用するDBMSの形式に合わせなければなりません。
・ユーザー情報~テーブル名:users
フィールド構成
名前 |
型 |
サイズ |
NULL |
主キー |
user_name |
varchar |
15 |
not null |
yes |
user_pass |
varchar |
15 |
not null |
|
・ロール情報~テーブル名:roles
フィールド構成
名前 |
型 |
サイズ |
NULL |
主キー |
role_name |
varchar |
15 |
not null |
yes |
・ユーザーとロールの組み合わせ~テーブル名:user_roles
フィールド構成
名前 |
型 |
サイズ |
NULL |
主キー |
user_name |
varchar |
15 |
not null |
yes |
role_name |
varchar |
15 |
not null |
yes |
- ユーザー情報 -
上に掲げたテーブル名やフィールド(列)名、サイズは、Tomcatのサンプルで使用されているものです。あくまで一例であって、これらは設定ファイルserver.xmlのRequestInterceptorエレメントで指定できるため、任意の名称を使っても構いません。
3つのテーブルには、例えば以下のようにレコードを記録することになります。
users(ユーザー情報)
u_name |
passwd |
taro |
tomcat1 |
keiko |
tomcat2 |
kazuya |
tomcat3 |
all |
tomcat0 |
roles(ロール情報)
user_roles(ユーザーとロールの組み合わせ)
user_name |
role_name |
taro |
role1 |
keiko |
role2 |
kazuya |
role2 |
all |
role2 |
- JDBCの設定 -
JDBCを介してデータベースにアクセスするには、Tomcatの設定ファイル$TOMCAT_HOME/conf/server.xmlの“RequestInterceptor”エレメントの記述を書き換えます。既存の
<RequestInterceptor
className="org.apache.tomcat.request.SimpleRealm"
debug="0" />
という箇所をコメントアウトし、その後に使用するDBMSの設定を、以下のようなオプションを使って記述します。
driverName: |
各DBMSに対応するJDBCドライバ名 |
connectionURL: |
データベースのURL |
userTable: |
ユーザーの基本情報を記録したテーブル名 |
userNameCol: |
上記テーブルのユーザー名を記録したフィールド(列) |
userCredCol: |
上記テーブルのパスワードを記録したフィールド(列) |
userRoleTable: |
ロール情報を記録したテーブル名 |
roleNameCol: |
上記テーブルのロール名を記録したフィールド(列) |
connectionName: |
データベース接続に用いるユーザー名(オプション) |
connectionPassword: |
データベース接続に用いるパスワード(オプション) |
server.xmlでは、OracleとMySqlの設定例が、コメントアウトされた形であらかじめ記述されているので、これらを使う場合、面倒な記述は不要です。
リスト2はOracle、リスト3はMySqlを使用する場合の設定例です。尚、当然のことですが、$JAVA_HOME/libには適切なJDBCドライバを保存しておく必要があります。
リスト2:Oracleを使用する場合のserver.xml
リスト3:MySqlを使用する場合のserver.xml
|
|
|