2014年6月21日土曜日

Basic認証とDigest認証の比較

Basic認証とDigest認証を比較するために環境を作成する手順をまとめます。
パケットキャプチャによりパスワードが取得できるかできないかについては
こちらの記事でまとめたいと思います。


■安全性
Basic認証とは、ユーザ名とパスワードをBase64でエンコードしてAuthorizationヘッダを付加してサーバにリクエストする方式です。
base64エンコードは暗号化ではなくただの符号化ですので、簡単に復号できてしまいます。
一方、Digest認証はユーザ名と暗号化したパスワードを利用するため、ネットワーク上を生パスワードが流れることはありません。
サーバ側に生パスワードを保存する必要がないのもポイントです。盗聴に対してBasic認証よりかはマシと考えられます。
Digest認証はMD5などの脆弱なアルゴリズムを使用します。SSLを使用した通信の暗号化の方が、資格証明の傍受を防ぐには好ましい方法です。


■認証設定ディレクトリ準備
[root@centos65 ~]# mkdir /var/www/html/basic
[root@centos65 ~]# mkdir /var/www/html/digest
[root@centos65 ~]# echo "<h1>/var/www/html/basic/index.html</h1>" > /var/www/html/basic/index.html
[root@centos65 ~]# echo "<h1>/var/www/html/digest/index.html</h1>" > /var/www/html/digest/index.html
[root@centos65 ~]#


■htpasswdファイル準備
## Basic認証用
[root@centos65 ~]# mkdir /etc/httpd/htpasswd
[root@centos65 ~]# htpasswd -bc /etc/httpd/htpasswd/basic.htpasswd basic secret
Adding password for user basic
[root@centos65 ~]# cat /etc/httpd/htpasswd/basic.htpasswd
basic:TrttZUUoY6iEE
[root@centos65 ~]#
※"-b"はパスワードを指定するオプション。

## Digest認証用
[root@centos65 ~]# htdigest -c /etc/httpd/htpasswd/digest.htpasswd DigestAuth digest
Adding password for digest in realm DigestAuth.
New password: ←secret
Re-type new password:
[root@centos65 ~]# cat /etc/httpd/htpasswd/digest.htpasswd
digest:DigestAuth:9d5ce11731e1e06d88aaa030476b5447
[root@centos65 ~]#
realm(領域名)を指定する必要がある。今回は"DigestAuth"とした。


■認証設定ファイル準備
[root@centos65 ~]# vi /etc/httpd/conf.d/auth.conf
[root@centos65 ~]# cat /etc/httpd/conf.d/auth.conf
## for Basic Authentication
<Directory "/var/www/html/basic">
    AuthType Basic
    AuthName "Basic Authentication"
    AuthUserFile /etc/httpd/htpasswd/basic.htpasswd
    Require valid-user
</Directory>

## for Digest Authentication
<Directory "/var/www/html/digest">
    AuthType Digest
    AuthName "DigestAuth"
    AuthUserFile /etc/httpd/htpasswd/digest.htpasswd
    Require valid-user
</Directory>
[root@centos65 ~]#
Digest認証はAuthNameにrealmで指定した値を設定する必要がある。


■httpd.confにモジュールがロードされているか確認
[root@centos65 ~]# grep -e auth_basic -e auth_digest /etc/httpd/conf/httpd.conf
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
[root@centos65 ~]#

## httpd再起動
[root@centos65 ~]# /etc/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]
[root@centos65 ~]#


■認証確認
## Basic認証
http://192.168.77.149/basic/


## Digest認証
http://192.168.77.149/digest/

Basic認証と同じような手順および使い勝手であるので、パスワードをとりあえず暗号化できるDigest認証の方がお勧めかも。


この情報が何かのお役にたてれば幸いです。m(_ _)m

0 件のコメント:

コメントを投稿