Digest認証を使ったアクセス制限を行う

Apache ではユーザーに対して Digest 認証(ダイジェスト認証)を行い、認証が通ったユーザーだけにディレクトリやファイルに対するアクセスを許可することができます。 Digest 認証では Basic 認証とは異なりブラウザとサーバ間でユーザー名とパスワードの情報がやり取りされるときに MD5 でハッシュ化されて送信されます。ここでは Digest 認証を使ったアクセス制限を行う手順について解説します。

※ ただセキュリティ的に強くなるかというと現時点ではそうでもなく、公式ヘルプでは Basic 認証+ SSL を推奨されています。

(Last modified: )

Digest認証の方式を設定する

Apache で Digest 認証を行うには次のディレクティブを設定する必要があります。

AuthType            認証方式
AuthName            認証領域
AuthDigestDomain    保護するURI
AuthDigestProvider  認証プロバイダ
AuthUserFile        パスワードファイル

AuthType ディレクティブでは認証方式を選択します。設定可能な値は None, Basic, Digest, Form の 4 つで今回は Digest 認証を使用するので Digest を指定します。

AuthName ディレクティブでは認証領域を選択します。一度認証が通ったあと同じ認証領域の名前が設定されている Digest 認証が必要なページへアクセスしたときに認証が不要となります。パスワードファイルでユーザーを作成するときに使用した領域名と一致する必要があります。

AuthDigestDomain ディレクティブではアクセス制限の保護の対象となる URI を指定します。

AuthDigestProvider ディレクティブでは認証プロバイダを選択します。デフォルトは file となっており今回のようにパスワードファイルを使用する場合は設定は不要です。 dbm 形式のパスワードファイルを使用する場合は dbm を指定してください。他に dbd が指定できます。

AuthUserFile ディレクティブでは使用するパスワードファイルを指定します。絶対パスまたは ServerRoot からの相対パスで指定します。

AuthType 、 AuthName 、 AuthDigestDomain 、 AuthDigestProvider 、 AuthUserFile の 5 つのディレクティブが記述できる場所は Directory, .htaccess です。 .htaccess で設定する場合は AllowOverride AuthConfig が設定されている必要があります。

※ Digest 認証で使用するパスワードファイルを事前に作成しておいてください。作成方法については「Digest認証用のユーザーを作成する(htdigestコマンド)」を参照されてください。

今回は次のような記述を行います。

AuthType Digest
AuthName "Staff Only"
AuthDigestDomain /private/
AuthDigestProvider file
AuthUserFile D:/pg/Apache/Apache24/password/passwords

Digest 認証を行う対象のディレクトリまたはファイルに対して上記の設定を記述します。今回はドキュメントルートの下の private ディレクトリに対して設定します。 httpd.conf ファイルを開き次のような記述を行いました。

<Directory "D:/pg/Apache/Apache24/htdocs/private">
  AuthType Digest
  AuthName "Staff Only"
  AuthDigestDomain /private/
  AuthDigestProvider file
  AuthUserFile D:/pg/Apache/Apache24/password/passwords
</Directory>

auth_digest_moduleモジュールを追加する

Digest 認証を行うには auth_digest_module モジュールが必要となります。 httpd.conf ファイルを開き、「LoadModule auth_digest_module modules/mod_auth_digest.so」を検索してください。

#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#

LoadModule auth_basic_module modules/mod_auth_basic.so
#LoadModule auth_digest_module modules/mod_auth_digest.so

先頭に # が記述されていた場合はコメントとなっているので # を削除してください。 httpd.conf ファイルを保存して Apache を再起動すると auth_digest_module モジュールを読み込みます。

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so

実際にDigest認証を行う

それでは実際に Digest 認証を設定して試してみます。今回は登録されているユーザーの中で tanaka にだけアクセスを許可します。 httpd.conf で設定を行う場合は次の設定をいずれかの場所に記述してください。

<Directory "D:/pg/Apache/Apache24/htdocs/private">
  AuthType Digest
  AuthName "Staff Only"
  AuthDigestDomain /private/
  AuthDigestProvider file
  AuthUserFile D:/pg/Apache/Apache24/password/passwords
  Require user tanaka
</Directory>

.htaccess ファイルを使用する場合は、 .htaccess ファイルに次の設定を記述したあと .htaccess ファイルをアクセス制限を行うディレクトリに設置してください。

AuthType Digest
AuthName "Staff Only"
AuthDigestDomain /private/
AuthDigestProvider file
AuthUserFile D:/pg/Apache/Apache24/password/passwords
Require user tanaka

Apache を再起動したあと、対象のディレクトリ内にある Web ページへブラウザからアクセスします。すると次のような認証ダイアログが表示されます。

実際にDigest認証を行う(1)

アクセスの許可が与えられている tanaka でログインします。ユーザー名とパスワードを入力し「ログイン」をクリックしてください。

実際にDigest認証を行う(2)

アクセス制限された Web ページを閲覧することができました。

実際にDigest認証を行う(3)

なおユーザーとしては登録されていてもアクセス許可が与えられていないユーザーでログインした場合、再び認証ダイアログの画面が表示されます。

-- --

Digest 認証を使ったアクセス制限を行う手順について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。