Digest認証一覧

Digest認証のパスワードファイルを作成するphpスクリプト

通常、レンタルサーバ等では管理画面よりBasic認証に必要なためのファイルを作ることが出来ますが
Basic認証よりセキュアなDigest認証を公式にサポートしていないサーバが多いと思います。
然しSSHがない環境でも、phpでDigest認証のパスワードを作ることが出来ます。

Digest認証については、Basic認証よりセキュアなDigest認証を使う方法を参照のこと。

下記PHPは取扱に注意すること。
# /path/to/htdigest.php

#!/usr/bin/php
<?php
/*
 * This script is create Digest Authentication files.
 */

// ".htdigest"'s path
$path = "/path/to/.htdigest";

// Common realms
$realm = array(
    0 => "This contents can join at Administrators only.",
    1 => "Members only.",
);
 
// Login users setting
$users = array(
    0=>array(
        "name"     => "admin",
        "realm"    => $realm[0],
        "password" => "adminpassword",
    ),
    1=>array(
        "name" => "member",
        "realm" => $realm[1],
        "password" => "memberpassword",
    ),
);
 // Create Crypted password
foreach ($users as $val)
{
    $put[] = sprintf('%s:%s:%s',$val["name"],$val["realm"],md5(sprintf('%s:%s:%s',$val["name"],$val["realm"],$val["password"])));
}

// Create .htdigest
$fp = @fopen($path,"w");
@($fp,implode("\n",$put)."\n");
@fclose($fp);
?>

.htaccessによる認証の分け方+Digest認証の設定方法

# Administrator's contents
<Location "/members/admin">
    AuthType Digest
    AuthName "This contents can join at Administrators only."
    AuthUserFile /path/to/.htdigest
    Require valid-user
</Location>

# Members's contents
<Location "/members/public">
    AuthType Digest
    AuthName "Members only."
    AuthUserFile /path/to/.htdigest
    Require valid-user
</Location>
独習PHP 第3版
  • 山田 祥寛
  • 価格   ¥ 3,456 prime
  • 販売者 Amazon.co.jp
クリックして今すぐチェック

Basic認証よりセキュアなDigest認証を使う方法

よく.htaccessで、認証制限をかけたいページにこんなの書いてますよね。

AuthType Basic
AuthName "Input your ID and Password."
AuthUserFile /path/to/.htpasswd
require valid-user

然し、Basic認証って実は入力したユーザ名とパスワードを平文で送信してしまうのです。
つまり、通信パケットを監視されていれば、認証に必要な入力情報をカンタンに拾えてしまうという事。

そこで、認証情報をMD5暗号化して送信するDigest認証。
詳しい仕組みは下記を参照のこと。
http://ja.wikipedia.org/wiki/Digest%E8%AA%8D%E8%A8%BC

自分でApacheのコンフィグを操作できる場合、下記コンフィグが読み込まれているか確認しましょう。
レンタルサーバの場合は対応がまちまちなので、各々お問い合わせください。

# Apache2.2以下:/etc/httpd/conf/httpd.conf
# Apache2.4以降:/etc/httpd/conf.module.d/00-base.conf
LoadModule auth_digest_module modules/mod_auth_digest.so

パスワードの作成は「htpasswd」コマンドの代わりに「htdigest」コマンドを使います。
※パスワードファイルの名前は自由ですが、Apacheの標準設定では「.ht」から始まるファイル名は全て表から閲覧できないようになっています。
なので、パスワードファイルを複数作る際は「.htdigest.loginuser」や「.htadmin」といったように
ファイル名が「.ht」から始まるようにしましょう。

htdigest (オプション引数) "(パスワードファイルのパス)" "(レルム)" (ユーザ名)
↓例↓
htdigest -c "/path/to/.htdigest" "Digest Auth" user001

.htaccessには、上記例を参考にするとこういう記述になるはず。
※AuthName(レルム)が一致していること。

AuthType Digest
AuthName "Digest Auth"
AuthUserFile "/path/to/.htdigest"
Require valid-user

Translate »