ベーシック認証とダイジェスト認証
HTTPの認証方法で代表的なものとしてベーシック認証、ダイジェスト認証などがある。
ベーシック認証
ベーシック認証は基本認証と呼ばれることもあり、ユーザとパスワードをコロンで繋ぎBase64でエンコードしたものを送信する。
サーバには以下のようなフォーマットでヘッダに含まれる。
Basic Z3Jtbjpob2dlaG9nZQ==
セキュリティ
盗聴された場合はbase64でデコードすることで簡単にユーザ・パスが判明する。
$ echo 'Z3Jtbjpob2dlaG9nZQ==' | base64 -D grmn:hogehoge
設定方法(Apacheの場合)
htpasswdの作成
$ htpasswd -c -b /path/to/.htpasswd <ユーザ名> <パスワード> #新規作成 $ htpasswd -b /path/to/.htpasswd <ユーザ名> <パスワード> #追記
Apacheの設定
AuthType Basic AuthName "Access to the staging site" AuthUserFile /path/to/.htpasswd Require valid-user
ダイジェスト認証
ベーシック認証で問題となった盗聴・改竄を防ぐために考案された。 パスワードをMD5でハッシュ化したものを送信する。ユーザ名は平文で流れる。
サーバには以下のようなフォーマットで送信される。
Digest username=\"grmn\", realm=\"Access to the staging site\", nonce=\"uWyUio91BQA=272da557c40a99343123d4de48a6ed1024cb5f60\", uri=\"/path/to/index.html\", algorithm=MD5, response=\"6b752b43a30e613c520f78b346553775\", qop=auth, nc=00000001, cnonce=\"2c2e499270c1169b\"
ダイジェスト認証の大枠の流れはDigest認証 - Wikipediaがわかりやすい。
htpasswdの作成
新規作成の場合は「-cオプション」を追加。追記の場合は「-cオプション」を除く。
$ htdigest -c /path/to/.htpasswd "Access to the staging site" ユーザ名 Adding password for grmn in realm Access to the staging site. New password:<パスワード応答> Re-type new password:<パスワード応答>
Apacheの設定
AuthType Digest AuthName "Access to the staging site" AuthUserFile /path/to/.htpasswd Require valid-user