2005-11-23

付録B 基本認証とダイジェスト認証

Apacheでは基本認証やダイジェスト認証が使用できます。基本認証にはmod_authモジュールが、ダイジェスト認証にはmod_auth_digestモジュールが必要になります。

mod_authを使った基本認証ではパスワードをテキストファイルに保存しますが、パスワードをデータベースに保存できるモジュールもあります。例えば、mod_auth_mysqlを利用すればMySQLサーバにパスワードを保存して管理する事が可能になります。また、Apacheではmod_sslモジュールを使ってSSL(Secure Sockets Layer)により、ユーザ認証から通信自体の暗号化が可能です。mod_auth_mysqlやmod_sslについてはまたの機会に取り上げる事にし、本章では基本認証とダイジェスト認証の設定方法について説明します。

httpd.confの設定

Apacheで基本認証を使うにはmod_authモジュールが必要です。また、ダイジェスト認証にはmod_auth_digestモジュールが必要になります。httpd.confでのモジュールの指定は以下のようになります。

httpd.conf

LoadModule auth_module modules/mod_auth.so
LoadModule auth_digest_module modules/mod_auth_digest.so

基本認証やダイジェスト認証を使用する場合、パスワードファイルを作成し、Webサーバに設置する必要があります。パスワードファイルはクライアントからアクセスできないディレクトリに設置するか、またはファイルにアクセスできないように保護する必要があります。本編では後者の方法でファイルを保護する事とし、パスワードファイルに以下の名前を付ける事にします。

.htpasswd --- 基本認証用のパスワードファイル
.htdigest --- ダイジェスト認証用のパスワードファイル

この時、httpd.confの設定は以下のようになります。

httpd.conf

<Files ~ "^\.ht">
  Order allow,deny
  Deny from all
</Files>

コマンドツールの準備

先に説明したように基本認証やダイジェスト認証を使用する場合、パスワードファイルを作成しなければなりません。そして、そのパスワードは暗号化する必要があり、エディタなどで作成するのは困難です。その時に使用するのがApache2付属のコマンドツール群です。

  • htpasswd --- 基本認証で使用するパスワードファイルを作成するコマンド
  • htdigest --- ダイジェスト認証で使用するパスワードファイルを作成するコマンド

これらのコマンドツールはApache2インストールフォルダ下のbinの中にあります。本編では以下の場所です。

C:\usr\Apache2\bin>

この場所を環境変数PATHに追加しておくと便利です。

基本認証

基本認証は一番簡単な認証方式ですが、ブラウザで入力されたパスワードが平文でサーバに送信されます。但し、サーバに設置されるパスワードファイルの中ではパスワードはMD5で暗号化されています。

パスワードファイル(.htpasswd)の作成

htpasswdコマンドを使ってパスワードファイル(.htpasswd)を作成します。まず、パスワードファイルを新規作成しユーザsunlightを作ります。ファイルの新規作成はオプション-cで指定します。

D:\WWWRoot\test>htpasswd -c .htpasswd sunlight    
Automatically using MD5 format.
New password: ****
Re-type new password: ****
Adding password for user sunlight

次に同じファイルにユーザothreを追加します。

D:\WWWRoot\test>htpasswd .htpasswd other
Automatically using MD5 format.
New password: ****
Re-type new password: ****
Adding password for user other

出来上がったパスワードファイル(.htpasswd)を示します。

.htpasswd

sunlight:$apr1$xA0.....$mspdRQEglfKX.4RAVTx8q0
other:$apr1$7H0.....$uDB/F0fXJ/njfCuwGoSIs0

アクセス制御ファイル(.htaccess)の設置

本編では、.htaccessを使って基本認証の設定を行います。

.htaccess

AuthType Basic
AuthName "Please Enter Your Password"
AuthUserFile D:/WWWRoot/test/.htpasswd
Require valid-use
ディレクディブ説明
AuthType   認証タイプを指定。基本認証:Basic、ダイジェスト認証:Digest
AuthName   基本認証ではユーザ認証の際にWebブラウザのダイアログに表示
されるメッセージを設定。
AuthUserFile パスワードファイル(.htpasswd)へのパスを設定。
Require    'valid-user'を指定する事でパスワードファイルに記載された
全ユーザに対してディレクトリへのアクセスを許可。

各ディレクディブの詳細は以下を参照して下さい。

http://httpd.apache.org/docs/2.0/howto/auth.html

ダイジェスト認証

ダイジェスト認証は基本認証と異なりパスワードが平文で送信される事はありません。ブラウザは、パスワード、ユーザ名、時刻等のデータからMD5と呼ばれるアリゴリズムを使ってダイジェスト値を計算し、この値がユーザ認証に利用されます。また、ダイジェスト認証では、realmと呼ばれる名前を使用して認証領域を識別します。

パスワードファイル(.htdigest)の作成

htdigestコマンドを使ってパスワードファイル(.htdigest)を作成します。認証領域(realm)には'private'と言う名前を指定します。まず、パスワードファイルを新規作成しユーザsunlightを作ります。ファイルの新規作成はオプション-cで指定します。

D:\WWWRoot\test>htdigest -c .htdigest private sunlight
Adding password for sunlight in realm private.
New password: ****
Re-type new password: ****

次に同じファイルにユーザothreを追加します。

D:\WWWRoot\test>htdigest .htdigest private other
Adding user other in realm private
New password: ****
Re-type new password: ****

出来上がったパスワードファイル(.htdigest)を示します。

.htdigest

sunlight:private:eeb44d5b8379dbd02b4208fbe2df95d1
other:private:420dcefea82d554475e6c5b48758f993

アクセス制御ファイル(.htaccess)の設置

本編では、.htaccessを使ってダイジェスト認証の設定を行います。

.htaccess

AuthType digest
AuthName "private"
AuthDigestFile D:/WWWRoot/test/.htdigest
Require valid-user
ディレクディブ説明
AuthType   認証タイプを指定。基本認証:Basic、ダイジェスト認証:Digest
AuthName   ダイジェスト認証では認証領域(realm)を設定。
AuthUserFile パスワードファイル(.htdigest)へのパスを設定。
Require    'valid-user'を指定する事でパスワードファイルに記載された
全ユーザに対してディレクトリへのアクセスを許可。

各ディレクディブの詳細は以下を参照して下さい。

http://httpd.apache.org/docs/2.0/howto/auth.html



最終更新のRSS Last-modified: Wed, 23 Nov 2005 08:57:59 JST (4205d)