Digest認証 (ダイジェスト認証)とは、基本的にBASIC認証と同じくIDとパスワードを入力してログインを行う認証方式。 BASIC認証との違いは、入力したIDやパスワードをハッシュ化した上でサーバー側に送信することにある。 これにより、BASIC認証にあったセキュリティレベルの脆弱性が改善された。

.htaccessのDigest認証設定

# vi .htaccess
AuthType Digest
AuthName "領域名"
AuthUserFile /etc/httpd/.htdigest
Require user USERNAME

# htdigest -c /etc/httpd/.htdigest '領域名' USERNAME
# ls -l /etc/httpd/.htdigest
-rw-r--r-- 1 root root 50 Mar  6 15:27 /etc/httpd/.htdigest

.htdigestファイルのパーミッションは変更しなくてOK(CentOS7)

.htaccessの設定

アクセス拒否

order allow,deny
allow from all
deny from 111.222.333.444
deny from .linuxexpert.ne.jp

アクセス許可

order deny,allow
deny from all
allow from 111.222.333.444
allow from .linuxexpert.ne.jp

ETAG設定

<Files ~ "\.(css|js|html?|xml|gz)$">
FileETag MTime Size
</Files>
<Files ~ "\.(gif|jpe?g|webp|png|flv|mp4|ico)$">
FileETag None
</Files>

404ファイル設定

ErrorDocument 404 /404.html
ErrorDocument 403 /404.html

Digest認証は、HTTPにおける認証方式の一つで、パスワードを平文で送信する「Basic認証」のセキュリティ上の欠点を改善したものです。ユーザー名とパスワードをハッシュ化し、サーバーから送信されるランダムな文字列(nonce)と組み合わせてから送信することで、盗聴されてもパスワードが漏洩しにくくなっています。

主な特徴と仕組み

  • パスワードのハッシュ化:ユーザー名とパスワードをそのまま送るのではなく、ハッシュ関数を使って一度だけ生成される不可逆な文字列(ハッシュ値)に変換します。
  • サーバとの連携:サーバーがランダムな文字列(nonce)をクライアントに送ります。クライアントは受け取ったnonceと入力したパスワードを組み合わせてハッシュ値を計算し、サーバーに送信します。
  • 認証プロセス:サーバーは受け取ったハッシュ値が、サーバー側で計算したハッシュ値と一致するかを照合することで認証します。
  • リプレイ攻撃への耐性:nonceを毎回変更することで、過去の認証情報が再利用される「リプレイ攻撃」を防ぎます。

Basic認証との比較

  • Digest認証:パスワードをハッシュ化して送信するため、盗聴されてもパスワードを特定されるリスクが低いです。
  • Basic認証:パスワードが平文で送られるため、盗聴されるとパスワードが漏洩します。

注意点

  • Digest認証は、中間者攻撃によって脆弱性が生じる可能性があります。そのため、SSL/TLSによる通信の暗号化と組み合わせることが推奨されます。
  • Digest認証はSSL/TLSが利用できない環境で使われることがあります。