Apache で Digest 認証の設定
WWW でユーザ認証を行なう際、Basic 認証が用いられることがあります。Basic 認証は認証情報を送信する際、プレインテキストを MIME エンコードして送信します。MIME エンコードされた文字列はすぐに戻せます。つまり通信内容が盗聴されるとログインIDとパスワードが簡単に知られてしまいます。
この欠点を無くし、認証情報の送信に MD5 による暗号化と、チャレンジ・レスポンス方式を採り入れたダイジェスト認証というものがあります。盗聴に強く、Apache 2.x 系であれば最初から利用可能です。最近の WWW ブラウザもほとんど対応していますので、Basic 認証を使う必要はほとんどありません。Digest 認証を使いましょう。
認証ファイルの生成
まず、ID とパスワードの情報が格納されるファイルを作成します。Basic 認証ではパスワードの情報を htpasswd コマンドで作成していましたが、Digest 認証では htdigest コマンドを利用します。
# htdigest -c passwd_file realm user_name
次に、.htaccess ファイルを認証が必要なディレクトリに配置します。httpd.conf で設定しても構いません。
AuthDigestFile /etc/httpd/conf/passwd_file AuthName realm AuthType Digest Require valid-user
これで WWW ブラウザのアクセス時に次のようなダイアログボックスが表示され、ID とパスワードの入力が求められます。使い勝手は Basic 認証と何ら変わりありません。Basic 認証と違うのは、htdigest コマンドで指定した realm と、.htaccess の AuthName が一致している必要があることです。
ちなみに、IP アドレスによる認証と併用したい場合は、.htaccess ファイルを次のように書きます。Basic 認証と基本的に同じです。
AuthDigestFile /etc/httpd/conf/passwd_file AuthName realm AuthType Digest Require valid-user Satisfy any order deny,allow allow from 192.168.1.0/24 deny from all
上記の例では、192.168.1.0/24 のネットワークからは認証なしでアクセスでき、それ以外からのアクセスは認証ダイアログが表示されます。
追記 (2009-01-28)
Apache 2.2 系列からは、AuthDigestFile のままですと次のようなエラーが出ます。
.htaccess: Invalid command 'AuthDigestFile', perhaps misspelled or defined by a module not included in the server configuration
AuthDigestFile ディレクティブが AuthUserFile に変更になっていますので、.htaccess ファイルを書き換える必要があります。
ご注意ください。
質問してもいいですか?
passwd_fileは、htaccessで使ってたものを
ファイル名を変えるだけでいいのでしょうか?
特定のIPだけパスワード認証し
それ以外を、エラーのページへ飛ばしたいのですが
書き方が、分かりません。
それと、照合する特定のIP(上記の処理で)を
パスワードみたいに暗号化して別ファイルにできますか?
コメント by 初めてのDigest認証 — 2005-06-7 16:14
>passwd_fileは、htaccessで使ってたものを
>ファイル名を変えるだけでいいのでしょうか?
ちょっと意味が分かりません。Basic認証で使っていたファイルという意味なら、違いますので利用できません。
>特定のIPだけパスワード認証し
order deny,allow
allow from 192.168.0.0/24
deny from all
のような記述を書けば制限できると思います。
>それと、照合する特定のIP(上記の処理で)を
>パスワードみたいに暗号化して別ファイルにできますか?
これはちょっとわかりません。
コメント by fumika — 2005-06-7 20:09
htdigest コマンドを利用してパスワードを生成するのが出来ません。
Basic 認証の時は、CGIを利用して作成しました。
Digest認証のパスワードを作成できるCGIまたは
フリーソフトなんてないのでしょうか?
コメント by 私には無理かな? — 2005-06-8 13:46
md5hashしただけなので、簡単に作れると思いますよ。
コメント by Take — 2005-12-1 17:42
わかりやすい手順の解説ありがとうございました。
参考になりました。
コメント by iringo — 2006-01-26 18:43