ダイジェスト認証を設定する

広告

ベーシック認証はほぼ全てのブラウザで利用することが出来ますが、ユーザー名とパスワードに関する情報をサーバに対して送信する時にプレインテキストで送られるため、もし通信内容が盗聴されるとユーザー名とパスワードが分かってしまいます。

そこでブラウザとサーバ間で行われる通信において、流れる情報をMD5で暗号化してから通信する方式がダイジェスト認証です。

設定方法はベーシック認証の場合と似ています。順に見ていきましょう。

パスワードファイルの作成

まずパスワードファイルの作成です。ベーシック認証の場合にはApacheで用意されている「htpasswd.exe」を使いましたが、ダイジェスト認証の場合には「htdigest.exe」を使います。このファイルが置いてある場所は「htpasswd」と同じく「(Apacheをインストールしたディレクトリ)¥Apache2.2¥bin」です。

実行する時の書式は次の通りです。

htdigest オプション パスワードファイル名 領域名 ユーザー名

作成するパスワードファイルを指定した上で、追加するユーザー名を指定します。パスワードファイルを新規に作成する場合はオプションに「-c」を指定します。既存のパスワードファイルにユーザーを追加する場合にはオプションには何も指定しません。

ベーシック認証の場合と異なる点は「領域名」を合わせて指定します。この領域名は「AuthName」で指定する領域名と同じでなくてはなりません。

htdigest -c "D:/Apache Group/passfile/digestpass" "Digest Auth" tanaka

上記ではパスワードファイルとして「D:¥Apache Group¥passfile¥digestpass」を、領域名として「Digest Auth」を、ユーザー名として「tanaka」を指定して新規のパスワードファイルをを作成しています。作成した際には設定するパスワード入力を2回求められます。

ダイジェスト認証

作成されたパスワードファイルはテキストファイルですので、テキストエディタで開いてみることができます。

tanaka:Digest Auth:8b9bdb87ca7a6a420af29f4dc6ca934e

「ユーザー名:領域名:パスワード」の形式で1ユーザー1行で記述されています。

httpd.confの設定

「httpd.conf」の設定は基本認証の場合とほぼ同じです。

「AuthType」には「Basic」の代わりに「Digest」を指定し、「AuthName」のはパスワードファイル作成時に指定したものと同じ領域名を指定します。パスワードファイルの指定は以前のバージョンでは「AuthDigestFile」を使ったようですがApache2.2系では「AuthUserFile」となります。

<Directory "D:/Apache Group/Apache2.2/htdocs/staffonly">
    AuthType Digest
    AuthName "Digest Auth"
    AuthUserFile "D:/Apache Group/passfile/digestpass"
    Require valid-user
</Directory>

モジュールの追加

ダイジェスト認証を使う場合には「auth_digest_module」モジュールをロードしておく必要があります。デフォルトでは読み込みしないようになっているようです。「httpd.conf」ファイルで「auth_digest_module」で検索してみて下さい。71行目付近に記述があります。

LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so

「auth_digest_module」に関する「LoadModule」の先頭に「#」が記述されてある場合は、「#」を外して下さい。これで次回から「auth_digest_module」モジュールを読み込んでくれるようになります。

LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so

ダイジェスト認証を試してみる

ではドキュメントルート以下の「staffonly」ディレクトリに対してダイジェスト認証を設定します。使われるパスワードファイルは先に作成したものをそのまま使います。

<Directory "D:/Apache Group/Apache2.2/htdocs/staffonly">
    AuthType Digest
    AuthName "Digest Auth"
    AuthUserFile "D:/Apache Group/passfile/digestpass"
    Require valid-user
</Directory>

実際にブラウザから「http://localhost/staffonly/staff.html」へアクセスすると次の用に認証ダイアログが表示されます。

ダイジェスト認証

認証ダイアログの画面のベーシック認証の場合とは少しだけ異なっていますが基本的には同じです。正しいユーザー名とパスワードを入力して認証が通れば該当のページが表示されます。

ダイジェスト認証

認証ダイアログの画面で「キャンセル」ボタンをクリックした場合は次のようなエラー表示が行われてリクエストは終了します。

ダイジェスト認証

ちなみにパスワードファイル作成時にユーザーに設定した領域名と、「AuthName」で設定した領域名が異なる場合にはユーザー名とパスワードが一致していても認証は通りません。

( Written by Tatsuo Ikura )