Digest認証設定方法 - セキュアなユーザー認証を用いて盗聴/改竄を防ごう!

お題の通りです! Digest認証を用いて、認証を突破しない限りページの閲覧ができないようにする方法を説明します。
ユーザー認証は、管理画面などによく用いられていますね。 システム構築案件に携わっている方や、個人でサイトを運営している方はよく耳にされているかと思います。

初めてDigest認証を設定される方や、以前に設定したことあるけど曖昧になってきている方に少しでもお役に立てばと思います!

目次

1 . Digest認証とは
2 . Digest認証に必要なファイル
3 . Digest認証設定方法
→ 例として使用する環境はCentOS6.6, Apache2.2となります。

1. Digest認証とは

Digest認証とは、Apacheのユーザー認証の1つです。
認証情報をMD5でハッシュ化するため、盗聴や改竄を防ぐことができます。

Digest認証について

Apacheのユーザー認証にはもう1つBasic認証があります。
基本的にはDigest認証と同じなのですが、主な違いは認証情報を平文で送っているという点です。 平文のため、盗聴や改竄されていても気づけません。セキュアじゃないですね。。

2. Digest認証に必要なファイル

以下のファイルが必要になります。

1 . httpd.conf
.htaccessを使用して設定することも可能。詳しくは後述の「3. Digest認証設定方法」を参照。
2 . .digestpass

3. Digest認証設定方法

設定方法について、httpd.confのみで設定する方法.htaccessも使用して設定する2パターンの設定方法をご紹介します。

前提
Digest認証の設定対象ディレクトリ: /var/www/public_html
httpd.confのパス: /etc/httpd/conf/httpd.conf ※ 自身の環境でhttpd.confのパスがわからない場合、$ locate httpd.confを実行することでパスが表示されます。

3-1. httpd.confのみの設定方法

1 . 以下の手順にてhttpd.confを編集する。

$ sudo vim /etc/httpd/conf/httpd.conf  
# 以下の記述を追記
<Directory "/var/www/public_html">
  AuthType Digest
  AuthName "Secret"
  AuthUserFile /var/www/public_html/.digestpass
  Require user test-digest
</Directory>
# 下記の行がコメントアウトされている場合は、コメントアウトを削除する。
LoadModule auth_digest_module modules/mod_auth_digest.so

2 . .digestpassを作成する。

$ htdigest -c /var/www/public_html/.digestpass 'Secret' test-digest  
htdigest -c /var/www/public_html/.digestpass 'Secret' test-digest  
Adding password for test-digest in realm Secret.  
New password:  
# New password:の時、設定したい任意のパスワードを入力しエンターを押す。※ 入力しても画面には表示されないので注意。

※ htdigestの引数には、httpd.confで設定した各値を入力します。 例:

$ htdigest -c AuthUserFile 'AuthName' Require user
3 . httpd.confの変更した内容を適用する。

$ sudo /etc/init.d/httpd restart

3-2. .htaccessを使用した設定方法

1 . 以下の手順にてhttpd.conf.htaccessの実行許可を設定する。

$ sudo vim /etc/httpd/conf/httpd.conf  
# 以下の記述を追記。
# <Directory "/var/www/public_html">が既に存在する場合は、Allow from allのみ追記する。
<Directory "/var/www/public_html">
  Allow from all
</Directory>
# 下記の行がコメントアウトされている場合は、コメントアウトを削除する。</em>
LoadModule auth_digest_module modules/mod_auth_digest.so

httpd.confを編集/再起動できない場合、上記変更箇所の内容となっていることを確認する。 → 確認し、上記変更箇所の内容となっていない場合、.htaccessでのDigest認証は残念ながらできません。

2 . httpd.confの変更した内容を適用する。

$ sudo /etc/init.d/httpd restart

3 . .htaccessを作成する。

$ vim /var/www/public_html/.htaccess  
# 以下の内容を記述。
AuthType Digest  
AuthName "Secret"  
AuthUserFile /var/www/public_html/.digestpass  
Require user test-digest

4 . .digestpassを作成する。

$ htdigest -c /var/www/public_html/.digestpass 'Secret' test-digest  
htdigest -c /var/www/public_html/.digestpass 'Secret' test-digest  
Adding password for test-digest in realm Secret.  
New password:  
# New password:の時、設定したい任意のパスワードを入力しエンターを押す。※ 入力しても画面には表示されないので注意。

※ htdigestの引数には、httpd.confで設定した各値を入力します。 例:

$ htdigest -c AuthUserFile 'AuthName' Require user

以上、Digest認証の設定方法でした。 お役に立てれば幸いです。 不明な点、ご指摘等ありましたらコメントにてお知らせください。