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