Webページパスワード制限(Apache)

2020-09-08

BASIC認証 と Digest認証に対応したWEBサーバを構築する。

BASIC認証(概要説明)

概要(BASIC認証)

Basic認証では、ユーザ名とパスワードの組みをコロン “:" で繋ぎ、Base64でエンコードして送信する。
このため、盗聴や改竄が簡単であるという欠点を持つが、ほぼ全てのWebサーバおよびブラウザで対応しているため、広く使われている。

フリー百科事典『ウィキペディア(Wikipedia)』より

通信フロー(BASIC認証)

典型的なBasic認証におけるHTTPクライアントとHTTPサーバの間の通信を紹介します。

  1. クライアントは認証が必要なページをリクエストする。しかし、通常ここではユーザ名とパスワードを送っていない。なぜならばブラウザはそのページが認証を必要とするか否か知らないためである。
  2. サーバは401レスポンスコードを返し、認証領域 (authentication realm) や認証方式 (Basic認証) に関する情報をクライアントに知らせる。
  3. ここでクライアントは、認証領域(通常アクセスしているコンピュータやシステムの簡単な説明)をユーザに提示して、ユーザ名とパスワードの入力を求める。ユーザはここでキャンセルすることもできる。
  4. ユーザ名とパスワードが入れられると、クライアントは認証ヘッダを含めたリクエストを再送信する。
  5. サーバは認証に成功して認証の必要なページのリクエストを処理するが、ユーザ名が不正だったりパスワードが間違っていた時にはサーバが再び401レスポンスコードを返す。このときは、クライアントは再びユーザにユーザ名とパスワードの入力をもとめる。

フリー百科事典『ウィキペディア(Wikipedia)』より

Digest認証(概要説明)

概要(Digest認証)

Digest認証(ダイジェストにんしょう)とは、HTTPの認証方法の一つで、Basic認証での盗聴や改竄を防ぐために考案された、ユーザ名とパスワードをMD5でハッシュ化して送る認証方法。

フリー百科事典『ウィキペディア(Wikipedia)』より

通信フロー(Digest認証)

典型的なDigest認証におけるHTTPクライアントとHTTPサーバの間の通信を紹介します

  1. クライアントは認証が必要なページをリクエストする。しかし、通常ここではユーザ名とパスワードを送っていない。なぜならばブラウザはそのページが認証を必要とするか否か知らないためである。
  2. サーバは401レスポンスコードを返し、認証領域 (realm) や認証方式(Digest)に関する情報をクライアントに返す。このとき、ランダムな文字列(nonce)も返される。
  3. ここでクライアントは、認証領域(通常は、アクセスしているサーバやシステムなどの簡単な説明)をユーザに提示して、ユーザ名とパスワードの入力を求める。ユーザはここでキャンセルすることもできる。
  4. ユーザ名とパスワードが入れられると、クライアントはnonceとは別のランダムな文字列(cnonce)を生成する。これよりユーザ名とパスワードと2つのランダムな文字列などを使ってハッシュ文字列(response)を生成する。
  5. クライアントはサーバから送られた認証に関する情報とともに、ユーザ名とresponseをサーバに送信する。
  6. サーバ側では、クライアントから送られてきたランダムな文字列(nonce、cnonce)などとサーバに格納されているハッシュ化されたパスワードから、正解のハッシュを計算する。
  7. この値と、クライアントから送られた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

スポンサーリンク

0
0