人気ブログランキングへ

2009年01月09日

Basic認証とDigest認証のヘッダ

Basic 認証はユーザー名とパスワードが平文で流されるのだ、と話には聞いているけれど実際にどのようなやりとりが行われるのか知らないことに気づいた。
それで、少し調べてみることにした。

試したのは Apache の 2.2.10。
ブラウザは、Mac OS X版の Firefox 3.0.5。

【Basic認証のヘッダ】

まず Apache で、Basic 認証するように設定する。

AuthType Basic
AuthName "Members Only"
AuthUserFile (htpasswd で作成したファイル)
Require user test


設定したサイトにアクセスしたときにやりとりされるヘッダを見てみると、サーバーから以下のようなレスポンスヘッダが送られていることがわかる。

WWW-Authenticate: Basic realm="Members Only"

ブラウザはこのヘッダを受け取ると、ユーザー名とパスワードを尋ねるダイアログを表示する仕組みらしい。
ユーザーがユーザー名とパスワードを入力すると、ブラウザは以下のようなヘッダをサーバーに送る。

Authorization: Basic dGVzdDpob2dlaG9nZQ==

dGVzdDpob2dlaG9nZQ== の部分は、なんとなく Base64 エンコードされた文字列のように見える。
実際、Linux などのコマンドラインで Base64 をデコードさせると

$ echo dGVzdDpob2dlaG9nZQ== | base64 -d
test:hogehoge


となり、まさにそのままのデータが送られていることがわかる。

【Digest 認証のヘッダ】

では、Digest 認証ではどうなるのだろうか。

Apache 設定を次のように変更してみる。

AuthType Digest
AuthName "Members Only"
AuthDigestDomain /members/ http://www.xxx.yyy.zzz/members/
AuthDigestProvider file
AuthUserFile (htdigest で作成したファイル)
Require user test


アクセスしてみると、次のようなヘッダが返されてくる。

WWW-Authenticate: Digest realm="Members Only", nonce="UCErxQJgBAA=adcfa99be662765c4ee565776bb72e56e9484f1a", algorithm=MD5, domain="Members Only http://www.xxx.yyy.zzz/members/", qop="auth"

認証ダイアログで、ユーザー名とパスワードを入力すると、

Authorization: Digest username="test", realm="Members Only", nonce="UCErxQJgBAA=adcfa99be662765c4ee565776bb72e56e9484f1a", uri="/members/", algorithm=MD5, response="51152682c7c236b3b19c01a68d9f5cdd", qop=auth, nc=00000001, cnonce="3e20e8e2ac01a260"

といったヘッダがサーバーに送られる。
おそらく、UCErxQJgBAA=adcfa99be662765c4ee565776bb72e56e9484f1aがチャレンジで、それに対して 51152682c7c236b3b19c01a68d9f5cdd を返す仕組みと思われる。
タグ:Apache 認証
posted by K/I at 10:55 | 東京 🌁 | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。