[Apache2.4]ダイジェスト認証の設定方法


はじめに

WordPressで始めてブログを作ってみましたが、まだ記事が全然無くて公開するのが恥ずかしい・・!
という状態なのでApacheのダイジェスト認証で、ブログにアクセスするためにユーザ名・パスワードの入力が必要となるよう設定してみました

環境

サーバ:CentOS 7.6
Webサーバ:Apache 2.4.6

※WordPressのプラグインは使用せず、.htaccessの編集によって設定する方法となります。

ダイジェスト認証とベーシック認証どっちが良い?

Apacheにはダイジェスト認証の他にベーシック認証という認証方式があります。
ダイジェスト認証の方がセキュリティの強度が高いため、特別な理由がなければダイジェスト認証を使用した方が良いと考えられます。

  • ベーシック認証:Base64という方式で暗号化。暗号化されたデータを復号化可能なので、盗聴された場合にパスワードが漏れる。
  • ダイジェスト認証:MD5という方式でハッシュ化。ハッシュ化されたデータは複合不可であるため、盗聴されてもパスワードは漏れない。

※古いブラウザだと対応していない事もあるようなので、サイト公開後に会員限定ページ等で認証をかけたい場合には、ベーシック認証も検討した方が良いかもしれません。

設定手順

.htaccessの設定

公開しているディレクトリの.htaccessに以下行を追加します。
私はWordPressのインストールフォルダの直下の.htaccessファイルに設定を追加しました。
(.htaccessを使用せずに/etc/httpd/conf/httpd.confで同じ設定をしても良いですが、
httpd.confを書き換えた場合はApacheの再起動が必要になります。)

.htaccess
AuthType Digest
# AuthNameには任意の名前を指定
AuthName "Digest Authentication"
AuthUserFile "/etc/httpd/.digest"
Require valid-user

認証ファイルの作成

認証ファイルを作成し、パスワードを設定します。
パスワード管理ファイルを作成するためには、htdigestコマンドを実行します。

$ htdigest -c /etc/httpd/.digest "Digest Authentication" testuser
Adding password for testuser in realm Digest Authentication.
New password: パスワードを入力してEnter

[構文]
# htdigest <オプション> <パスワードファイル> < realm名 > <ユーザ名>

・realm名には.htaccessのAuthNameで指定した文字列を指定。
・ユーザ名には任意のユーザ名を指定。(OS上に存在しないユーザ名でも良い)
・初回実行時にはオプションに「-c」が必要。

動作確認

対象ページにアクセスして認証画面が表示する事を確認します。
先程設定したユーザ名・パスワードを入力して、認証が通れば通常の画面が表示されます。

備考

・パスワードを再設定したい場合には、オプション(-c)無しで再度コマンドを実行します。

$ htdigest /etc/httpd/.digest "Digest Authentication" testuser

・ユーザを追加したい場合は、オプション(-c)無しでユーザ名を書き換えてコマンドを実行します。

$ htdigest /etc/httpd/.digest "Digest Authentication" testuser2

・特定のユーザだけ削除したいという場合には、直接.digestファイルを編集して、対象ユーザの行を削除します。

$ vi /etc/httpd/.digest

#以下削除したいユーザの行を削除する
test:Digest Authentication:ハッシュ化されたパスワード
test2:Digest Authentication:ハッシュ化されたパスワード

・認証できない場合は以下疑ってみましょう。
 ・apacheのダイジェスト認証用のモジュール(mod_auth_digest)が読み込まれているか。
 (このモジュールはApache2.4以上の場合デフォルトで有効に設定されていますが、上手くいかない場合には無効化されていないか確認するのが良いかと思います。)

 ・対象ディレクトリ下でhtaccessファイルが有効になるよう、Apache設定ファイル(httpd.conf)で設定されていること。

おわりに

内容に誤りなどがありましたら、ご指摘いただけますと幸いです!

さて、早くWordPressでも記事を書かなければ・・