Webページパスワード制限(Apache)
BASIC認証 と Digest認証に対応したWEBサーバを構築する。
BASIC認証(概要説明)
概要(BASIC認証)
Basic認証では、ユーザ名とパスワードの組みをコロン “:" で繋ぎ、Base64でエンコードして送信する。
このため、盗聴や改竄が簡単であるという欠点を持つが、ほぼ全てのWebサーバおよびブラウザで対応しているため、広く使われている。
フリー百科事典『ウィキペディア(Wikipedia)』より
通信フロー(BASIC認証)
典型的なBasic認証におけるHTTPクライアントとHTTPサーバの間の通信を紹介します。
- クライアントは認証が必要なページをリクエストする。しかし、通常ここではユーザ名とパスワードを送っていない。なぜならばブラウザはそのページが認証を必要とするか否か知らないためである。
- サーバは401レスポンスコードを返し、認証領域 (authentication realm) や認証方式 (Basic認証) に関する情報をクライアントに知らせる。
- ここでクライアントは、認証領域(通常アクセスしているコンピュータやシステムの簡単な説明)をユーザに提示して、ユーザ名とパスワードの入力を求める。ユーザはここでキャンセルすることもできる。
- ユーザ名とパスワードが入れられると、クライアントは認証ヘッダを含めたリクエストを再送信する。
- サーバは認証に成功して認証の必要なページのリクエストを処理するが、ユーザ名が不正だったりパスワードが間違っていた時にはサーバが再び401レスポンスコードを返す。このときは、クライアントは再びユーザにユーザ名とパスワードの入力をもとめる。
フリー百科事典『ウィキペディア(Wikipedia)』より
Digest認証(概要説明)
概要(Digest認証)
Digest認証(ダイジェストにんしょう)とは、HTTPの認証方法の一つで、Basic認証での盗聴や改竄を防ぐために考案された、ユーザ名とパスワードをMD5でハッシュ化して送る認証方法。
フリー百科事典『ウィキペディア(Wikipedia)』より
通信フロー(Digest認証)
典型的なDigest認証におけるHTTPクライアントとHTTPサーバの間の通信を紹介します
- クライアントは認証が必要なページをリクエストする。しかし、通常ここではユーザ名とパスワードを送っていない。なぜならばブラウザはそのページが認証を必要とするか否か知らないためである。
- サーバは401レスポンスコードを返し、認証領域 (realm) や認証方式(Digest)に関する情報をクライアントに返す。このとき、ランダムな文字列(nonce)も返される。
- ここでクライアントは、認証領域(通常は、アクセスしているサーバやシステムなどの簡単な説明)をユーザに提示して、ユーザ名とパスワードの入力を求める。ユーザはここでキャンセルすることもできる。
- ユーザ名とパスワードが入れられると、クライアントはnonceとは別のランダムな文字列(cnonce)を生成する。これよりユーザ名とパスワードと2つのランダムな文字列などを使ってハッシュ文字列(response)を生成する。
- クライアントはサーバから送られた認証に関する情報とともに、ユーザ名とresponseをサーバに送信する。
- サーバ側では、クライアントから送られてきたランダムな文字列(nonce、cnonce)などとサーバに格納されているハッシュ化されたパスワードから、正解のハッシュを計算する。
- この値と、クライアントから送られたresponseが一致する場合認証成功として、コンテンツを返す。失敗時は401レスポンスコードを返す。
フリー百科事典『ウィキペディア(Wikipedia)』より
Webサーバー設定(BASIC認証)
htpasswdファイル作成(BASIC認証)
[前提条件]
- htpasswdコマンドでsecretというユーザーを作成し、パスワードを設定する。
- ファイルは、/etc/httpd/cond/.htpasswd に保存する
- [httpd.conf]等に追記する方法と、[.htaccess]を利用する方法があるが、今回は、httpd.confに追記する
htpasswdファイル作成
# htpasswd -c /etc/httpd/conf/.htpasswd secret New password: Re-type new password:
ファイルが存在するか確認する
# ls -al /etc/httpd/conf/|grep .htpasswd -rw-r--r-- 1 root root 21 10月 10 21:03 .htpasswd
設定ファイル編集(BASIC認証)
httpd.conf のバックアップ(BASIC認証)
# cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.20091010
httpd.conf の編集(BASIC認証)
/var/www/vhost/www/html/wiki へのアクセスにBASIC認証を追加する
# vi /etc/httpd/conf/httpd.conf <VirtualHost 192.168.24.153> ServerName www.example1.jpl DocumentRoot /var/www/vhost/www/html ErrorLog /var/www/vhost/www/logs/www-error_log CustomLog /var/www/vhost/www/logs/www-access_log combined # Basic Auth <Directory "/var/www/vhost/www/html/wiki"> AuthType Basic AuthName "Secret Zone" AuthUserFile /etc/httpd/conf/.htpasswd Require user secret </Directory> </VirtualHost>
Webサーバー設定反映(BASIC認証)
構文チェック
# /etc/init.d/httpd configtest Syntax OK
Apache再起動
CentOS 6.x
# /etc/init.d/httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ]
CentOS 7.x
# systemctl restart httpd
Webページパスワード制限の導入(Digest認証)
Webサーバー設定(Digest認証)
[前提条件]
htpasswdコマンドでsecretというユーザーを作成し、パスワードを設定する。
ファイルは、/etc/httpd/cond/.htdigest に保存する
[httpd.conf]等に追記する方法と、[.htaccess]を利用する方法があるが、今回は、httpd.confに追記する
mod_auth_digestが有効か確認(Digest認証)
# cat /etc/httpd/conf/httpd.conf|grep mod_auth_digest LoadModule auth_digest_module modules/mod_auth_digest.so
コメントアウトされていなければOK
htdigestファイル作成(Digest認証)
# htpasswd -c /etc/httpd/conf/.htdigest 'Secret Zone' secret New password: Re-type new password:
ファイルが存在するか確認する
# ls -al /etc/httpd/conf/|grep .htdigest -rw-r--r-- 1 root root 21 10月 10 21:32 .htdigest
設定ファイル編集(Digest認証)
httpd.conf のバックアップ(Digest認証)
# cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.20091010
httpd.conf の編集(Digest認証)
/var/www/vhost/www/html/wiki へのアクセスにDigest認証を追加する
# vi /etc/httpd/conf/httpd.conf <VirtualHost 192.168.24.153> ServerName www.example1.jpl DocumentRoot /var/www/vhost/www/html ErrorLog /var/www/vhost/www/logs/www-error_log CustomLog /var/www/vhost/www/logs/www-access_log combined # Digest Auth <Directory "/var/www/vhost/www/html/wiki"> AuthType Digest AuthName "Secret Zone" # [認証するフォルダ](ドキュメントルートからのパス) AuthDigestDomain /wiki AuthUserFile /etc/httpd/conf/.htdigest Require user secret </Directory> </VirtualHost>
Webサーバー設定反映(Digest認証)
構文チェック
# /etc/init.d/httpd configtest Syntax OK
Apache再起動
CentOS 6.x
# /etc/init.d/httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ]
CentOS 7.x
# systemctl restart httpd
ディスカッション
コメント一覧
まだ、コメントがありません