htaccessによるDigest認証
WEBページにアクセス制限設ける場合に、一般的にBasic認証が使われていますが、Basic認証だとパスワードが平文で送信されるので、セキュリティ的に脆弱となります。
その点、Digest認証にすると、ユーザ名とパスワードをMD5でハッシュ(ダイジェスト)化して送信するため、より安全となります。
1. Apacheの設定
Digest認証を行う場合には、Apacheで「auth_digest_module」を有効にする必要があります。
LoadModule auth_digest_module modules/mod_auth_digest.so
2. パスワードファイルの作成
パスワードファイルを作成するには、以下のコマンドを実行します。
# htdigest -c (パスワードファイル名) (レルム) (ユーザ名)
※「-c」オプションは、新規でファイルを作成する場合に指定します。
なお、コマンドを実行するとパスワードを聞かれますので、(ユーザ名)に対応するパスワードを入力して下さい。
【例】
# htdigest -c /var/_private/.htdigest "This site is a protected site." web_user
3. .htaccessファイルの作成
AuthType Digest
AuthName "This site is a protected site."
AuthUserFile /var/_private/.htdigest
Require valid-user
※「AuthName」はパスワードファイルの作成時に指定した「レルム」と同じ文字列を入力します。
4. httpd.confに記述する場合
httpd.confに記述する場合には<Directory>セクションではなく、必ず<Location>セクションに記述します。
<Location "/">
AuthType Digest
AuthName "This site is a protected site."
AuthUserFile /var/_private/.htdigest
Require valid-user
</Location>
5. 特定のファイルのみ認証を除外する方法
(1) .htaccessの場合
該当のファイル名をFileMatchで除外します。
【例】_health.htmlのみを除外
<FilesMatch "^(_health\.html)$">
Satisfy any
Require all granted
</FilesMatch>
(2) httpd.confもしくはVirtualHostに記述する場合
<Location>で指定します。
【例】/health.htmlのみを除外
<VirtualHost *:80>
<Location /health.html>
Satisfy any
Require all granted
</Location>
</VirtualHost>
6. 特定のディレクトリのみ認証を除外する方法
(1) .htaccessに記述する場合
除外したいフォルダの.htaccessに以下の記述をします。
Satisfy any
Require all granted
(2) httpd.confもしくはVirtualHostに記述する場合
<Directory "/var/www/html/except">
satisfy any
Require all granted
</Directory>
7. 特定のファイルのみ認証を掛ける方法
(1) .htaccessの場合
該当のファイル名をFileMatchで認証を掛けます。
【例】members.htmlのみを除外
<FilesMatch "^(members\.html)$">
AuthType Digest
AuthName "This site is a protected site."
AuthUserFile /var/_private/.htdigest
Require valid-user
</FilesMatch>
(2) httpd.confもしくはVirtualHostに記述する場合
<Location>で指定します。
【例】/members.htmlのみを掛ける
<VirtualHost *:80>
<Location /members.html>
AuthType Digest
AuthName "This site is a protected site."
AuthUserFile /var/_private/.htdigest
Require valid-user
</Location>
</VirtualHost>
8. サイト全体のDigest認証とは別に特定のサブディレクトリに異なるDigest認証を設定する
例えば、サイト全体にDigest認証がかかっている状態で、その配下の「/pretest/」のみ別の認証を設定したい場合です。
下記の例では、リクエストURIが「/pretest/」の場合とその他の場合で分岐しています。
なお、「/pretest/」のスラッシュをそのまま記載すると500エラーになるので、「\x2F」にします。
<If "%{REQUEST_URI} =~ /^\x2Fpretest\x2F.*/">
AuthType Digest
AuthName "This site is a protected site."
AuthUserFile /var/_private/.htdigest_pretest
Require valid-user
</If>
<Else>
AuthType Digest
AuthName "This site is a protected site."
AuthUserFile /var/_private/.htdigest
Require valid-user
</Else>
9. 特定のIPのみ認証を除外する場合
内部IPの場合には認証を外す。
<Directory "/var/www/html">
<RequireAny>
AuthType Digest
AuthName "This site is a protected site."
AuthUserFile /var/_private/.htdigest
Require valid-user
Require ip 10.
</RequireAny>
</Directory>
10. Digest認証とIPアクセス制限を同時に掛ける場合
<RequireAll>
AuthType Digest
AuthName "This site is a protected site."
AuthUserFile /var/_private/.htdigest
Require valid-user
<RequireAny>
Require ip xxx.xxx.xxx.xxx
</RequireAny>
</RequireAll>
11. WebRelease2に認証を付ける場合
# vi /etc/httpd/conf/httpd.conf
<IfModule mod_proxy.c>
<Proxy *>
AuthType Digest
AuthName "This site is a protected site."
AuthUserFile /var/_private/.htdigest_wr2
Require valid-user
</Proxy>
ProxyPass /WebRelease2 http://127.0.0.1:50002/WebRelease2
ProxyPassReverse /WebRelease2 http://127.0.0.1:50002/WebRelease2
ProxyTimeout 1800
</IfModule>
最終更新:2024年04月24日 14:11