Apache で Digest 認証の設定

2004-3-12 00:05
このエントリーをはてなブックマークに追加

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 ファイルを書き換える必要があります。
ご注意ください。

  • ブックマーク : アクセス: 46,361回
  • カテゴリー : Apache
  • キーワード :

5件のコメント

  1. 質問してもいいですか?
    passwd_fileは、htaccessで使ってたものを
    ファイル名を変えるだけでいいのでしょうか?

    特定のIPだけパスワード認証し
    それ以外を、エラーのページへ飛ばしたいのですが
    書き方が、分かりません。

    それと、照合する特定のIP(上記の処理で)を
    パスワードみたいに暗号化して別ファイルにできますか?

    Comment by 初めてのDigest認証 — 2005-06-7 16:14

  2. >passwd_fileは、htaccessで使ってたものを
    >ファイル名を変えるだけでいいのでしょうか?

    ちょっと意味が分かりません。Basic認証で使っていたファイルという意味なら、違いますので利用できません。

    >特定のIPだけパスワード認証し
    order deny,allow
    allow from 192.168.0.0/24
    deny from all
    のような記述を書けば制限できると思います。

    >それと、照合する特定のIP(上記の処理で)を
    >パスワードみたいに暗号化して別ファイルにできますか?
    これはちょっとわかりません。

    Comment by fumika — 2005-06-7 20:09

  3. htdigest コマンドを利用してパスワードを生成するのが出来ません。
    Basic 認証の時は、CGIを利用して作成しました。
    Digest認証のパスワードを作成できるCGIまたは
    フリーソフトなんてないのでしょうか?

    Comment by 私には無理かな? — 2005-06-8 13:46

  4. md5hashしただけなので、簡単に作れると思いますよ。

    Comment by Take — 2005-12-1 17:42

  5. わかりやすい手順の解説ありがとうございました。
    参考になりました。

    Comment by iringo — 2006-01-26 18:43

現在、コメントフォームは閉鎖中です。

67 queries. HTML convert time: 1.135 sec. Powered by WordPress. Valid XHTML
Copyright © 2003-2017 @ futuremix.org ログイン