Apache Digest認証で悪戦苦闘
Digest認証
Apache でユーザ認証を行う仕組みとして Digest認証 という仕組みがあります。 基本的な認証方式である Basic認証 と違い、 Digest認証 ではパスワードが暗号化されてネットワーク上を流れるため、Basic認証 と比べて比較的安全な仕組みです。Apache2.0からは標準でサポートされているということもあって、今回 Digest認証 を実際に試してみました。
結果的にDigest認証でのウェブページ公開は成功しましたが、その過程で何度か行き詰まったのでそのときの話を記録しておくことにしました。細かい話は省略しますが、書籍やウェブサイトを参考に以下の設定内容で Digest認証 の設定を行いました。 Digest認証の細かい設定方法を知りたい場合は Directoryディレクティブ で Digest認証 を設定 に記事があります。
AuthType Digest
AuthName "profaim-test-member"
AuthDigestFile /home/profaim/pass/.DigestFile
<Limit GET POST>
Require valid-user
</Limit>
</Directory>
Digest認証 の設定が原因でエラー
ここで問題となったのが、AuthDigestFileと書いてあるパスワードファイルの指定部分です。この設定を有効とするために Apache を再起動したところ、AuthDigestFile というコマンドは定義されていないとエラーになりました。
Syntax error on line 141 of /usr/local/apache2/conf/httpd.conf:
Invalid command 'AuthDigestFile', perhaps misspelled or defined by a module not included in the server configuration
#
書籍を調べると、Digest認証 には mod_auth_digestモジュール が必要と書いてありました。そのためモジュールがインストールされているパス(デフォルトなら /usr/local/apache2/modules)に mod_auth_digest.so があるか確認したところ、インストールされていなかったため、再度Apacheをインストールすることにしました。
Apache を再インストールしたが解決せず
Apache を Linux 上で ソースコードからビルドしていたので、 --enable-auth_digest=shared
を付けてApacheを再インストールしました。これでうまく起動できるかと思いましたが、結果は同じエラーでした。 Apache のインストール方法は Apache 2.2.2 インストール(Linux)
に記事があります。
AuthDigestFile の指定を AuthUserFile に変更したところ解決
これでは問題が解決しなかったのでネットを検索していると、この件に関して2つのサイトを見つけました。 Exim/Veximの導入・設定メモ ( http://www.fkimura.com/exim1.html ) を見ると、ここに同じ事象の記事があり AuthDigestFile ではエラーとなってしまったため AuthUserFile にしたと書いてありました。 もう少し理由が欲しいと思い見つけた 甘蕉を喰らひてけふも行く ( http://www.tokyoyozora.com/blog/archives/2006/02/http.html ) では、docディレクトリ を見た感じでは AuthDigestFile から AuthUserFile に変わったらしいと書いてありました。
これらサイトを参考に 「AuthDigestFile /home/profaim/pass/.DigestFile」
の部分を 「AuthUserFile /home/profaim/pass/.DigestFile」
に変更して、 Apache を再起動したところ今度はうまくいきました。
#
追加で確認
Moduleをインストールせずに Digest認証
少し気になったので、 httpd.conf の 「LoadModule auth_digest_module modules/mod_auth_digest.so」
をコメントアウトして Digest認証 の設定をしてみました。 LoadModule の行をコメントアウトすると、そのモジュールはロードされなくなるため、 mod_auth_digest モジュールをインストールしていないのと同じ状態になります。
Digest認証 に設定したURLにアクセスすると、ユーザとパスワードを入力するダイアログが表示されました。ところがパスワードファイルに登録したユーザとパスワードを入力しても認証は全く成功しませんでした。一見うまくいってるように見えるだけに要注意です。
Digest認証 を設定したのに認証が通らないという場合は、mod_auth_digest モジュールがインストールされているか、 httpd.conf に 「LoadModule auth_digest_module modules/mod_auth_digest.so」
の記述を忘れていないか確認してみるのが良さそうです。