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 の日記に Windows 版 Apache での設定をメモしてある.