Apacheで使うDigest認証ファイルをPerlで作る
mod_auth_digestでDigest認証を使う場合、Apache付属のhtdigestコマンドを使ってパスワードファイルを作成する。mod_auth_basicでBasic認証を使うときに、htpasswdコマンドを使うのと同じだね。
さて、htdigestコマンドを使えば良いことなんだけど、CGIをインタフェースにユーザ管理画面を提供しようと思うと、インタラクティブなインタフェースしか持っていないhtdigestコマンドはどうにも扱いにくい。expectで書くのもなんだかバカらしいというか。
そこで、PerlスクリプトでDigest認証用のファイルを作ることにしたよ。
use Digest::MD5; $htdigest = &get_htdigest($user, $realm, $pass); sub get_htdigest() { my $user = $_[0]; my $relm = $_[1]; my $pass = $_[2]; my $ctx = Digest::MD5->new; $ctx->add ("$user:$relm:$pass"); return "$user:$relm:" . $ctx->hexdigest; }
Apacheが使うDigest認証ファイルは、コロン(:)区切りで、ユーザ名:レルム:認証情報、という形式をしている。認証情報は、ユーザ名:レルム:生パスワード、という文字列のMD5ハッシュだ。Digest::MD5モジュールはたぶん標準モジュールだから追加のインストールは不要。たったこれだけのことでDigest認証用のファイル(の1行)が出来た。expect使ってまで標準コマンドを使う必要はないってことだね。
ちなみにDigest認証を使う場合、IE限定でmethod=GETなCGIがうまく動かない不具合があるので注意が必要。
http://d.hatena.ne.jp/inuz/20060511/p1