MEMO

5月 13 2011

ApacheのWindows版でベーシック認証


ローカル環境でベーシック認証を実行しようとしても、
動かなかった。

やった手順

【1】ベーシック認証をかけたいフォルダに.htaccessを置く

AuthUserFile	"/xampp/htdocs/makePage/.htpasswd"
AuthName		"nishou"
AuthType		Basic
require valid-user

【2】AuthUserFile で指定した場所に.htpasswdを置く

test1:FqkNI8TaVZUhs

↓参考サイト

【3】できません!!!

解決策

上記の方法でやったらできました。
で、書き出したパスワードファイルは

test1:$apr1$RN......$SciBQQcdMbonWjHrDYKBj0

う~ん。なんかいつもと雰囲気が違うなぁ・・・。
Google先生に聞いてみよう!!!!

(~以下転記~)
Apacheは、パスワードファイルのパスワードを照合する時、「$apr1$」というヘッダがついているものをmd5形式で格納されていると認識します。
それ以外は、Windows版Apacheの場合、暗号化なしでそのままパスワードが格納されていると認識します。
(Linux版Apacheの場合は、crypt()で暗号化したものが格納されていると認識します。)

Apache付属のhtpasswdコマンド以外のツールでパスワードを生成しているのでしょうか?
「$apr1$」というヘッダがパスワードの頭についていないのであれば、そのパスワード作成ツールはmd5形式をサポートしてないのかもしれません。

なるほど・・・。

(~以下転記~)

crypt(passwd, salt)

利用者のパスワードをファイルに保存する際、そのまま保存しておくと危険なので、crypt() で DES による暗号化を行ってから保存するとよい。暗号化したパスワードから元のパスワードを解読することは困難だが、元のパスワードをチェックすることは容易にできる。解読を困難にするために、salt にはドット(.)、スラッシュ(/)を含む2文字の英数文字をランダムに指定する。この2文字は暗号化されたパスワードの最初の2文字となる。2文字目より後ろは無視される。

# パスワードを "hi.mi.tu" とする
$passwd = "hi.mi.tu";

# 暗号化したパスワード($epasswd)を得る
srand();
@salts = ( "A".."Z", "a".."z", "0".."9", ".", "/" );
$salt = $salts[int(rand(64))] . $salts[int(rand(64))];
$epasswd = crypt($passwd, $salt);
print "epasswd=$epasswd\n";

# 暗号化したパスワードでパスワードをチェックする
$passwd = "hi.mi.tu";
$epasswd = "ZpoK9sz7yGHRo";
if ($epasswd eq crypt($passwd, $epasswd)) {
    print "Match!!\n";
}

MD5 がサポートされているシステムでは、salt に、”$1$” で始まる 8文字($1$ を含めて11文字)を指定することにより、MD5 を使用できる。DES よりも安全度が高い。

(~以下転記~)
《Windows》 MD5形式のみ
《Unix、Linux》 MD5またはDES暗号化

つまり・・・!!!!!!!!

↓よくあるベーシック認証の暗号化《DES》

test1:FqkNI8TaVZUhs

↓今回作成したテイストの違う暗号化《MD5》

test1:$apr1$RN......$SciBQQcdMbonWjHrDYKBj0

で・・・。

《Windows》 MD5形式のみ
《Unix、Linux》 MD5またはDES形式

今まで、DESのことを、MD5と勘違いしてたー!!!!!!!
参考サイト様ありがとうございます。
勉強になります。

Tags: , ,

Trackback URL

Leave a Reply