ぱそくま ろご
Linux > Apache HTTP > ベーシック、ダイジェスト認証

ベーシック、ダイジェスト認証

認証

Apache httpdにはサイトへのアクセス制御としてIDとパスワードを使用した認証機能があります。 認証方法はベーシック認証とダイジェスト認証の2つです。 ベーシック認証とダイジェスト認証の違いは、クライアントから送られる認証内容(IDやパスワード)のエンコード等です。設定方法も若干異なります。

ベーシック認証とダイジェスト認証の違い
ベーシック認証ダイジェスト認証
クライアントからの認証内容の送信方法プレインテキストをMIMEコーディングで送信します。MD5コーディングで送信します。
盗聴に対してMIME形式なので盗聴者がパケットを取得した場合、簡単にデコード(IDとパスワードを復元)できます。MD5なのでデコードが困難。
パスワードファイル新規作成htpasswd -c [passwd_file] [user_name]htdigest -c [passwd_file] [realm] [user_name])
対応ブラウザほとんど全てのブラウザが対応。i-mode、ヤフーケータイ等可IE5.0以上やMozilla1.0以上。i-mode、ヤフーケータイ等不可
用途(注1) 不特定多数を対象にしたい場合や携帯も対応したい場合。なおこの場合SSLと組み合わせるほうが無難。 Web管理者等、接続者が限定されている場合。

注1:あくまでも、このサイトの主観です。



必要なモジュール

認証をhttpdで実装するには認証ファイルを読み取るもの、アクセス制御するのもの、実際の認証を行うものなど複数のモジュールが必要となります。

ベーシック、ダイジェストに必要なモジュール

  • #ベーシック認証に必要
  • LoadModule auth_basic_module modules/mod_auth_basic.so
  • #ダイジェスト認証に必要
  • LoadModule auth_digest_module modules/mod_auth_digest.so
  • #認証用のテキストファイルの読み込みに必要
  • LoadModule authn_file_module modules/mod_authn_file.so
  • #認証済みユーザーへのウェブサイトアクセス制御
  • LoadModule authz_user_module modules/mod_authz_user.so

ベーシック認証の設定例

/var/www/html/basicsampleディレクトリ(DocumentRootが/var/www/html/の場合、http://www.hoge.com/basicsample)のアクセスをtarouとjirouに設定例です。 ベーシック認証ファイル(.htpasswd)はDocumentRoot外の/var/www/に置く事とします。

ベーシック認証ファイルの作成例

  • # cd /var/www/
  • # htpasswd -c .htpasswd tarou
  • New password:<パスワード>
  • Re-type new password:<パスワード>
  • Adding password for user tarou
  • # htpasswd .htpasswd jirou
  • New password:<パスワード>
  • Re-type new password:<パスワード>
  • Adding password for user jirou

httpd.confの設定例

  • #ベーシック認証の設定例
  • <Directory "/var/www/html/basicsample">
  •   AuthType Basic
  •   AuthName "local Basic auth"
  •   AuthUserFile /var/www/.htpasswd
  •   Require valid-user
  • </Directory>

-cオプションはパスワードファイルを新たに作成する時に指定します。なお、指定したファイルが存在すると削除して、新しく作ります。

ダイジェスト認証の設定例

hogeリーム(グループみたいなもの)のtarouとjirouにアクセス可能にする設定例です。

ダイジェスト認証ファイルの作成

[root ~]# cd /var/www/
[root /var/www] htdigest -c .htdigest hoge tarou
Adding password for tarou in realm hoge.
New password:<パスワード>
Re-type new password:<パスワード>
[root /var/www] htdigest .htdigest hoge jirou
Adding password for jirou in realm hoge.
New password:<パスワード>
Re-type new password:<パスワード>

リームって結局なんなの?と思っている方へ:AuthNameで指定するものと覚えてください。同じ名前でもグループを変えれば登録できるって事かな?

httpd.confの設定

# ダイジェスト認証の設定例
# 注1)
BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
<Directory "/var/www/html/digestsample">
  AuthType Digest

  #realmを指定
  AuthName "hoge"

  #ダイジェスト認証ファイルを絶対パスで指定
  AuthUserFile /var/www/.htdigest

  #認証OKだけ、許可。
  Require valid-user
</Directory>

注1)IE6.0ではダイジェスト認証のページでリクエストにクエリ・ストリング(htt://www.aaa.com?ddd=aaaなど)が含まれていると失敗するバグがあります。これを回避するためにhttpdにこの設定が必要になります。