Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
39
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

basic認証の挙動

メジャーなWebサーバではBasic認証が使えるが、なんとなく弱いことは知っていた。
その挙動を勉強するためWiresharkを使って実験してみた。

サーバ情報

クライアント:192.168.0.2
サーバ:192.168.0.5
アカウント:admin/admin

実験

1.リクエスト

この時、クライアントは認証ありのページなのか、認証なしのページなのか知らないので、通常のリクエストを送る。
basic1.JPG

2.401認証エラー

basic認証ありのページだということをクライアントに知らせるため、401を返す。
HTTPヘッダ内の
『WWW-Authenticate: Basic realm="Secret Zone"\r\n』
がBasic認証だということを表している。
realmはサーバ側で設定した認証が必要なエリアの名前。
basic2.JPG

3.アカウント情報の入力

HTTPヘッダ内の『Authorization: Basic YWRtaW46YWFh\r\n』
これがサーバに送信されているユーザ名+パスワードだ。
Wiresharkはコレを解読する機能を持っているようで、その下に『Credentials: admin:aaa』と表示されている。
確かにコレが入力したものだ。


※この解読機能は難しいものではなく、Base64でエンコードされているだけなので、LinuxのコマンドやWebサイトでデコードできる。
$echo YWRtaW46YWFh | base64 -d
admin:aaa

basic3_miss.JPG

4.間違えたらまた401

3では間違ったアカウントを入力したので、認証エラーとなり401がかえってくる。
basic4.JPG

5.正しい情報を送信

正しいアカウント情報を送信する
basic5_correct.JPG

6.200 OK

無事認証成功したので、200 OKが返ってくる。
basic6_ok.JPG

結果

basic認証はパケットキャプチャされる環境では平文と同じなので、危険。
設定も難しくないので、digest認証にするべし

.htpasswdの中身解説


$cat .htpasswd
admin:$apr1$vK0OgaPF$BYuV8aK/fjgn1PB7aahJJ/

adminはユーザ名
$apr1$はMD5のダイジェストというマーク
APRはApache Portable Runtimeの略。
$vK0OgaPF$の8文字(32bit)がsalt
『BYuV8aK/fjgn1PB7aahJJ/』はsalt + passwdを1000回繰り返したハッシュ値?
http://httpd.apache.org/docs/2.2/misc/password_encryptions.html (ソースへのリンクもあります)

参考文献

wikipedia, Basic認証
http://ja.wikipedia.org/wiki/Basic%E8%AA%8D%E8%A8%BC

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
39
Help us understand the problem. What are the problem?