たぶん難しくないApache2・初期設定編その3の補足2~「ダイジェスト認証」の場合~ [Linux(Apache)]
さて。前々アーティクルではBASIC認証を使用した。手軽に使えるし、まあ個人的に使うとかイントラネット内部だけでの使用という程度であるなら、これでもさしたる不都合は無いと思う。ただ、少しでも本格的にWebサーバを運用しようとなると、BASIC認証では不安が残る。
というもの、認証用のIDとパスワードが平文で流れてしまうので、その筋の人がちょちょいと悪さをしようものならば、たちまちIDとパスワードがブッコ抜かれてしまうという問題がBASIC認証にはあるのであった。
そこで導入されたのが「ダイジェスト認証」という仕組み。これは、BASIC認証の時にはIDとパスワードをそのまま流していた(厳密には、Base64でエンコードされているので、人間の見た目的にはそのままでは何が書かれているのか判読は不可能だが、簡単にデコードできる代物なので、実質的には「そのまま」流れていると考えてよい)が、ダイジェスト認証では、IDとパスワードを「ハッシュ化」しておくるので、複合化してIDとパスワードを割り出すことが難しくなっている。(しかし、まったく出来ないという訳でもないらしい…詳しいことはよくわからないので興味があるようなら各自で調べてもらいたい)
このダイジェスト認証も、BASIC認証と大体同じような感覚で使用できるので、こちらの設定方法についても説明しておく。
BASIC認証からの変更点としては、まずはじめに「AuthType Basic」と記述したディレクティブを「AuthType Digest」と書き改めるところから始まる。これで認証方式としてはダイジェスト認証が使用することが宣言される。
続いて、「AuthBasicProvider」ディレクティブは使用せず、変わりに「AuthDigestProvider」を使用する。引数はfileで変わらないけど。
「AuthUserFile」と「AuthName」、「Require」はそのまま。ただし、「AuthName」で指定している「認証領域」の文字列は、この後IDとパスワードを作成する際に必要となるのであまりに変な物とか選ぶと後悔します。なぜなら、AuthNameが変更されてしまうと、IDとパスワードを保存しているファイルを最初から作り直すハメになるからである。
というわけで、BASIC認証とダイジェスト認証とを並べて記述したhttpd.confの内容を例示するとこんな感じ。
上側のブロックがBASIC認証、下側のブロックがダイジェスト認証。
なお、BASIC認証で用いるパスワードファイルと、ダイジェスト認証で用いるパスワードファイルとは共用できないので、別々に用意する必要がある。また、上記の例でダイジェスト認証用のパスワードファイルを作成する際のコマンド例は、
こんな具合になる。AuthNameで使用した「認証領域」を引数に指定している所を要チェック。また、認証領域に空白が入っている場合は当然のことながらダブルクォーテーションなどで囲む必要があることは言うまでも無い。さらに、htpasswdコマンドと同様、「-c」オプションの指定には気をつけること。
あ、モジュールの組み込みも必要。
LoadModule auth_digest_module modules/mod_auth_digest.so
これが必要。なおBASIC認証を使わないでダイジェスト認証だけ…ということなら
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_default_module modules/mod_authz_default.so
こういう具合に指定することになろう。(要するにBASIC認証のモジュールだけ抜く感じで)
というもの、認証用のIDとパスワードが平文で流れてしまうので、その筋の人がちょちょいと悪さをしようものならば、たちまちIDとパスワードがブッコ抜かれてしまうという問題がBASIC認証にはあるのであった。
そこで導入されたのが「ダイジェスト認証」という仕組み。これは、BASIC認証の時にはIDとパスワードをそのまま流していた(厳密には、Base64でエンコードされているので、人間の見た目的にはそのままでは何が書かれているのか判読は不可能だが、簡単にデコードできる代物なので、実質的には「そのまま」流れていると考えてよい)が、ダイジェスト認証では、IDとパスワードを「ハッシュ化」しておくるので、複合化してIDとパスワードを割り出すことが難しくなっている。(しかし、まったく出来ないという訳でもないらしい…詳しいことはよくわからないので興味があるようなら各自で調べてもらいたい)
このダイジェスト認証も、BASIC認証と大体同じような感覚で使用できるので、こちらの設定方法についても説明しておく。
BASIC認証からの変更点としては、まずはじめに「AuthType Basic」と記述したディレクティブを「AuthType Digest」と書き改めるところから始まる。これで認証方式としてはダイジェスト認証が使用することが宣言される。
続いて、「AuthBasicProvider」ディレクティブは使用せず、変わりに「AuthDigestProvider」を使用する。引数はfileで変わらないけど。
「AuthUserFile」と「AuthName」、「Require」はそのまま。ただし、「AuthName」で指定している「認証領域」の文字列は、この後IDとパスワードを作成する際に必要となるのであまりに変な物とか選ぶと後悔します。なぜなら、AuthNameが変更されてしまうと、IDとパスワードを保存しているファイルを最初から作り直すハメになるからである。
というわけで、BASIC認証とダイジェスト認証とを並べて記述したhttpd.confの内容を例示するとこんな感じ。
<Directory /var/www/html/auth_contents> AuthType Basic AuthBasicProvider file AuthUserFile auth/userauth AuthName "Takamiya Shrine" Require valid-user </Directory> <Directory /var/www/html/auth_digest> AuthType Digest AuthDigestProvider file AuthUserFile auth/userdigest AuthName "Takamiya Shrine" Require valid-user </Directory>
上側のブロックがBASIC認証、下側のブロックがダイジェスト認証。
なお、BASIC認証で用いるパスワードファイルと、ダイジェスト認証で用いるパスワードファイルとは共用できないので、別々に用意する必要がある。また、上記の例でダイジェスト認証用のパスワードファイルを作成する際のコマンド例は、
[root@kagami conf]# htdigest -c /etc/httpd/auth/userdigest "Takamiya Shrine" kagami.hiiragi Adding password for kagami.hiiragi in realm Takamiya Shrine. New password: Re-type new password:
こんな具合になる。AuthNameで使用した「認証領域」を引数に指定している所を要チェック。また、認証領域に空白が入っている場合は当然のことながらダブルクォーテーションなどで囲む必要があることは言うまでも無い。さらに、htpasswdコマンドと同様、「-c」オプションの指定には気をつけること。
あ、モジュールの組み込みも必要。
LoadModule auth_digest_module modules/mod_auth_digest.so
これが必要。なおBASIC認証を使わないでダイジェスト認証だけ…ということなら
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_default_module modules/mod_authz_default.so
こういう具合に指定することになろう。(要するにBASIC認証のモジュールだけ抜く感じで)
コメント 0