Digest 認証

mod_auth_digest - Apache HTTP Server
認証、承認、アクセス制御 - Apache HTTP サーバ


Digest 認証とは,Basic 認証のようにパスワードを平文でサーバに送るのではなく,MD5 などのようなダイジェストにしてサーバに送ることによってパスワードを直接盗聴されないようにする認証である.ただし,認証後の通信が暗号化されないことは Basic 認証と同じであり,通信路自体を暗号化したい場合は SSL などを使う必要がある.

/etc/apache2/httpd.conf で

LoadModule auth_digest_module            modules/mod_auth_digest.so

のように設定されていれば Digest 認証は有効になっている.


Digest 認証のパスワードファイルは,htdigest2 (または htdigest)コマンドで作成する.

$ /usr/sbin/htdigest2 -c /home/rero/.htdigest "private" rero
Adding password for rero in realm private.
New password:
Re-type new password:
$ cat /home/rero/.htdigest
rero:private:731d6d0d9903b92de407bc4926fa1918

ここで,"private" という文字列は realm (英語で領域,範囲などの意味.レルムと発音)というものである.realm は認証するディレクトリごとに設定するもので,同じホストで realm が同じディレクトリには,再び認証ダイアログを出すことなく同じダイジェストをサーバに送って認証を試みる.
パスワードファイルの置き場所は Web 上から辿れない限りどこでもよいが,other users に見えるようになっていなければ,認証ダイアログで認証に成功しない.


.htaccess は以下のように設定する.

$ cat .htaccess
AuthType Digest
AuthName "private"
AuthDigestFile "/home/rero/.htdigest"
Require valid-user

AuthName は上で設定した realm と合わせる.htdigest2 では realm を空文字列にすることができたが,.htaccess で AuthType を空文字列にすると Internal Server Error になるようだ.
また,realm は同じホストでのみ有効であるように述べたが,AuthDigestDomain ディレクティブを設定しておけば別のホスト名でも有効となる.

関連

2005/02/09 の日記WindowsApache での設定をメモしてある.