apache を Digest 認証対応にする

はじめに

http の認証認定方式には主に BASIC 認証が使われています。 しかし通信経路上においてパケットを盗聴されることにより簡単に id Password が 知れてしまいます。
そこでBasic 認証よりもパケット盗聴に強い Digest 認証を利用するモジュール mod_auth_digest.so を 組み込みたいと思う。

README を読めば分かるが apache1.3. において mod_auth_digest.so は

This code isn't supported officially.

とあるようにまだ開発テスト段階である事を付け加えておく

Basic認証とDigest認証の特徴

Basic 認証
・認証情報の送信にはプレインテキストを MIME エンコードしたもの
・パケットを盗聴されると簡単にデコード出来てしまう
・対応しているブラウザが多い (ほぼ全てのブラウザ i-mode 等でも利用できる)
Digest 認証
・認証情報の送信には MD5 による暗号化,チャレンジ・レスポンス型のダイジェスト認証
・パケットを盗聴されても id password の復元は困難
・対応しているブラウザが最近の物に限られるHTTP/1.1を利用
(対応ブラウザは MS 系だとIE5 以降,Mozilla1.0,Konqueror 2.2.*)


ダイジェスト認証は (RFC2069 1997-01 IETF Proposed Standard として公開),(RFC 2617 1999-06 IETF Draft Standards として公開)、 apache_2.0 系においては標準でインストールされるのですが、 apache_1.3.* は src/modules/experimental/mod_auth_digest.c という名前でダイジェスト認証モジュールが 同梱されています。(標準のコンパイルではインストールされない) 従ってこの機能を apache1.3.* から利用するには apache とは別にコンパイルする必要がある.

また MD5 で暗号化されているとは言えダイジェスト認証でも絶対安全という訳では無いと思う。 さらに高度な認証を必要とするなら通信そのものを暗号化つまり SSL しかない。

利用用途は Webページの認証や WebDAV で使用すればさらにセキュリティの強化に繋がります。

インストールについて


ここでは apxs を利用してモジュールとして機能させる事とする
apxs を利用してモジュールを作成
$ tar zxvf apache_1.3.27.tar.gz
$ cd apache_1.3.27/src/modules/experimental
$ /usr/sbin/apxs -c -D DEV_RANDOM mod_auth_digest.c
$ sudo /usr/sbin/apxs -i mod_auth_digest.so
httpd.conf に以下を追加
# モジュールのロード
LoadModule digest_auth_module modules/mod_auth_digest.so
AddModule mod_auth_digest.c
ファイル名 .htaccess で認証が必要なディレクトリに以下を作成
<Limit HEAD GET POST>
AuthDigestFile /home/user/user.dig
AuthName digest
AuthType Digest

Require valid-user
</Limit>
認証用ファイル(パスワード情報が格納される) user.dig の作成
BASIC認証の場合は htpasswd で作成していたが
Digest認証の場合には htdigest を使用する

詳細は man htdigest
コマンド書式: htdigest -c passwdfile realm username

[/home/user]$ htdigest -c user.dig digest username
Adding user username in realm digest
New password:
Re-type new password:

認証入力時のポップアップウィンドウの違い(I.E 6.0使用時)


Basic認証

Digest認証

Digest 認証テスト


認証サンプル
※USER PASS 共に[user]を入れて下さい。