2011年11月12日土曜日

Tomcat 6(Windows X64版) JDBCレルムによるFORM認証 パスワードの暗号化

http://memoyasu.blogspot.com/2011/11/tomcat-6windows-x64-jdbcform.html」では、JBDCレルムを使用したFORM認証の設定方法について記載しました。
前回は、ユーザのパスワードは平文でMySQLに格納してFORM認証していたので、今回は、ハッシュ関数でダイジェスト化したパスワードを使用し、FORM認証します。

①Tomcatのcatalina.jar(C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib配下)には、org.apache.catalina.realm.RealmBaseクラスが存在します。このクラスでは、ダイジェスト値を作成してくる機能があります。以下のjavaコマンドを実行し、"pass"をダイジェスト化します。

c:\>set CATALINA_HOME=C:\Program Files\Apache Software Foundation\Tomcat 6.0
c:\>java -cp "%CATALINA_HOME%\lib\catalina.jar;%CATALINA_HOME%\bin\tomcat-juli.j
ar"  org.apache.catalina.realm.RealmBase -a SHA1 pass
pass:9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684

★現時点でSHA2にはまだ対応していないようだ。。。。

②算出したダイジェスト値をMySQLのユーザテーブルに格納します。。。。と思ったら、ユーザテーブルのパスワードの型をvarchar(10)で作成していたため、格納領域が足りませんでした。まず、ユーザテーブルのパスワードの型を拡張します。

mysql> alter table auth_users modify
    -> user_password varchar(50);
Query OK, 1 row affected (1.91 sec)
Records: 1  Duplicates: 0  Warnings: 0

③算出したダイジェスト値をMySQLのユーザテーブルに格納します。

mysql> update auth_users
    -> set user_password='9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684'
    -> where user_name='hanako';
Query OK, 1 row affected (0.19 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from auth_users;
+-----------+------------------------------------------+
| user_name | user_password                            |
+-----------+------------------------------------------+
| hanako    | 9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684 |
+-----------+------------------------------------------+
1 row in set (0.00 sec)


③server.xml(C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf配下)を編集します。JDBCレルムの設定において、digest値に'SHA1'を記載します。

      <Realm className="org.apache.catalina.realm.JDBCRealm"
             driverName="org.gjt.mm.mysql.Driver"
             connectionURL="jdbc:mysql://localhost:3306/bushido"
             userTable="auth_users" userNameCol="user_name" userCredCol="user_password"
             userRoleTable="auth_roles" roleNameCol="role_name"
             connectionName="root" connectionPassword="password"
             digest="SHA1"/>

④Tomcatを再起動します。「http://localhost:8080/sampleapp/sample.html」にアクセスし、FORM認証が成功することを確認します。

0 件のコメント: