Webアプリ開発事始 第16回

安全な通信を考える(2)
~SSLを使ったユーザー認証サイトの構築
長谷川裕行
有限会社 手國堂

Tomcatとデータベースの準備

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(ロール情報)
r_name
role1
role2

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



トップページ
実行環境
Tomcatとデータベースの準備
TomcatとJ2SEの設定
データベースの準備
ユーザー情報
JDBCの設定
セッション管理の準備
JSPのソース作成
ApacheとIISでSSLを使うには
あとがき

Copyright © MESCIUS inc. All rights reserved.