Tomcatのパスワードをダイジェスト化するJavaTips 〜アプリケーションサーバ/コンテナ活用編

» 2004年05月25日 10時00分 公開
[佐藤匡剛@IT]

 Tomcatでは、基本認証やダイジェスト認証などの認証方法を利用することができます。しかし、パスワードは平文(暗号化されていない普通のテキストファイル)で保存されるため、パスワードが保管されているフォルダへのアクセス権を持つ人に、パスワードを知られてしまう危険性があります。

 このようなパスワードの漏えいを防ぐために、ハッシュ関数を用いてパスワードをダイジェスト化して格納しておくという方法があります。ダイジェスト化されたパスワードから元の平文パスワードを復元することは、非常に難しいとされています。従って、万一ダイジェスト化されたパスワードが他人に知られてしまっても、そこから元のパスワードを知られてしまう危険はまずありません。

 ユーザー認証の際は、ユーザーが送信した平文パスワードを同じアルゴリズムのハッシュ関数を用いてダイジェスト化し、このダイジェスト化されたパスワード同士を照会することによって、ユーザーの送信したパスワードが正しいかどうかを確認することができるのです。

注意:ダイジェスト認証とパスワードのダイジェスト化とは別のものです。ダイジェスト認証は、認証の際にパスワードのダイジェストだけを送信することで、通信経路の秘密性を確保するためのものです。一方、ここで説明するパスワードのダイジェスト化は、サーバに保存されている認証情報が読み取られてしまうことを防ぐためのものです。従って、パスワードをダイジェスト化して保存したからといって、認証時の通信経路の安全性が確保されるわけではないことに注意してください。筆者が確認した限り、Tomcat(Tomcat5.0.19)では現在のところ両者の併用はできないようです。そのため、パスワードのダイジェスト化をしたうえで通信経路の安全性も確保したければ、SSL(Secure Socket Layer)を導入する必要があります。ここでは、基本認証におけるパスワードのダイジェスト化の方法について説明します。

パスワードのダイジェスト化

 認証の際にダイジェスト化されたパスワードを利用するには、まずパスワードのダイジェストを生成する必要があります。Tomcatでは、平文パスワードをダイジェスト化するクラスが用意されており、以下のコマンドによって利用できます(環境変数%CATALINA_HOME%には、Tomcatのルートフォルダが設定されていることとします。Windowsでのデフォルトのルートフォルダは「C:\Program Files\Apache Software Foundation\Tomcat 5.0」です)。

パスワードをダイジェスト化するコマンド
> java -cp "%CATALINA_HOME%\server\lib\catalina.jar;%CATALINA_HOME%
\common\lib\jmx.jar;%CATALINA_HOME%\bin\commons-logging-api.jar"
org.apache.catalina.realm.RealmBase -a アルゴリズム パスワード

注意:実際には改行せずに、すべて続けて入力します。

 ここで、「アルゴリズム」には「MD5」「SHA-1」などのメッセージダイジェストアルゴリズム名を指定します。「パスワード」には、ダイジェストを生成するパスワードを平文で指定します。

 アルゴリズムとパスワードを指定して、次のようにコマンドを実行すると、ダイジェストが表示されます。

生成されたダイジェスト
> java -cp "%CATALINA_HOME%\server\lib\catalina.jar;%CATALINA_HOME%
\common\lib\jmx.jar;%CATALINA_HOME%\bin\commons-logging-api.jar"
org.apache.catalina.realm.RealmBase -a MD5 my_password
my_password:a865a7e0ddbf35fa6f6a232e0893bea4


 「:」(コロン)の左側が平文パスワード、右側がそのダイジェストになります。ここでは、アルゴリズムとして「MD5」を用いています。

ダイジェスト化されたパスワードの保存

 次に、Tomcatルートフォルダ下のconfフォルダにあるtomcat-users.xmlを修正し、生成したダイジェスト化されたパスワードを登録します。

tomcat-users.xml(ダイジェスト化されたパスワードを登録)
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="javatips"/>
  <user username="sato" password="a865a7e0ddbf35fa6f6a232e0893bea4"
 roles="javatips"/>
</tomcat-users>


 通常、user要素のpassword属性には平文パスワードが書かれているので、ここに先ほど生成したダイジェスト化されたパスワード(赤字部分)を記入します。

server.xmlの変更

 最後に、Tomcatルートフォルダ以下のconfフォルダにあるserver.xmlを修正し、ダイジェスト化の際に使用したメッセージダイジェストアルゴリズムの種類をTomcatに通知します。server.xmlのRealm要素に以下の属性を追加します(赤字部分)。

server.xml(メッセージダイジェストアルゴリズムの指定)
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                  debug="0" resourceName="UserDatabase" digest="MD5"/>


 追加したdigest属性の値には、パスワードのダイジェスト化に用いたアルゴリズムを記入します(ここでは「MD5」)。

 以上で設定は完了です。Tomcatを再起動させると、設定が有効になります。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。