3流プログラマのメモ書き

元開発職→現社内SEの三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

Basic認証パスワードの文字が合ってるか確認する方法

.htpasswdで設定しているBasic認証の文字が合ってるか確認している方法です。 例えば、新規に.htpasswdファイルを作成し、ユーザー:hoge,パスワード:1234を設定するとします。

$ htpasswd -c ./.htpasswd hoge
New password:1234
Re-type new password:1234
Adding password for user hoge

.htpasswdの内容を確認すると以下のようになっています。

$ cat .htpasswd
hoge:yRV2qHzSEDP96

ベーシック認証ってBase64で符号化されているので、htpasswdもそうだとずっと思ってたら、大きな勘違いしてました。 ブラウザ~Webサーバ間のパスワードはBase64送信されてます。なので通信さえ傍受すれば簡単に元のパスワードが判明します。

しかし、htpasswdは暗号化されてパスワードが保存されます。暗号化はデフォルトだと cript(), -m オプションを付けるとmd5になります。 暗号化されてる部分の最初の2文字(上の例だと yR )はSALTになります。SALTは毎回ランダムになります。SALTを暗号化の際に用いるので、同じパスワードを htpasswd コマンドで実行しても毎回異なる文字列となります。

さて、本題ですが、opensslコマンドを使うことで確認することができます。 -salt オプションで、.htpasswdファイル内のパスワード部分先頭2文字を指定し、その後ろにパスワードを指定しています。
こんな感じ。

$ openssl passwd -crypt -salt yR 1234
yRV2qHzSEDP96

なお、htpasswdコマンドで用いられるデフォルトのcrypt()暗号は8文字までしか認識しません。 8文字以上を使うには、-m オプションを付けます。

参考:
.htpasswd Basic認証パスワードを確認する方法と文字数制限の巻 - TrippyBoyの愉快な日々
【apache】basic認証をかけるメモ 〜 .htpasswdや.htaccessについて - tweeeetyのぶろぐ的めも
アクセス制限ベーシック認証~パスワードでページを守ろう~ - .htaccessの小技編 - futomi's CGI Cafe