サーブレット 12章 ユーザ情報の管理
- 12.1. JDBC Realm/DataSource Realm
- 12.2. OpenLDAP
- 12.3. JNDI Realm
- 12.4. パスワードの暗号化
12.4. パスワードの暗号化
これまでMemory Realm, JDBC Realm, DataSource Realm, JNDI Realmについて説明してきました。いずれの場合もパスワードは平文の状態で保存しますが、暗号化した状態で保存するように変更することも可能です。Realmの設定で、digest属性を指定します。digest属性を指定すると、パスワードは指定された暗号化アルゴリズムで保存されているとみなされます。指定できるアルゴリズムは「SHA」「MD5」の2つで、指定された場合にはそれぞれのアルゴリズムでパスワードは暗号化されている必要があります。
<Realm className="org.apache.catalina.realm.MemoryRealm" debug="1" pathname="/home/tomcat/sample/WEB-INF/users.xml" digest="SHA" />
Tomcatではパスワードを暗号化する便利なユーティリティが提供されています。「org.apache.catalina.realm.RealmBase」クラスです。
java org.apache.catalina.realm.RealmBase -a (アルゴリズム名) (パスワード)
の形式で使用します。RealmBaseクラスはTomcatの「server/lib/catalina.jar」に含まれていますので、クラスパスに含めて実行する必要があります。
$ java org.apache.catalina.realm.RealmBase -a MD5 test test:098f6bcd4621d373cade4e832627b4f6
パスワードを暗号化すると、たとえユーザ情報が盗まれても、暗号を破らない限りログインされないというメリットがあります。積極的に利用するようにしましょう。
ただし1つこの方法には問題があります。本来、J2EEで定められている「BASIC」「DIGEST」「FORM」「CLIENT-CERT」のいずれの方法でも動作しなければならないはずなのですが、Tomcatでは「DIGEST」認証の場合には動作しないようです。バグと思われるので、注意してください。
(実習課題5)
実習課題4のWebアプリケーションのパスワードを、SHAで暗号化するように改良しなさい。