配置Apache Basic和Digest认证
轉(zhuǎn)載:http://blog.jobbole.com/41519/
在伯樂在線看到一篇《在Nginx下對(duì)網(wǎng)站進(jìn)行密碼保護(hù)》文章, 正好和自己這兩天研究的問題有些相同點(diǎn)。我側(cè)重研究的是如何破解。雖然在那篇文章中注明密碼是加密存儲(chǔ)的, 但是他忽略了一點(diǎn)就是密碼在網(wǎng)絡(luò)中傳輸是明文傳輸?shù)?#xff0c;所以那種加密方式不可取。
下面就是我對(duì)Apache用戶認(rèn)證的一些理解。
Apache常見的用戶認(rèn)證可以分為下面三種:
- 基于IP,子網(wǎng)的訪問控制(ACL)
- 基本用戶驗(yàn)證(Basic Authentication)
- 消息摘要式身份驗(yàn)證(Digest Authentication)
訪問控制
訪問控制不屬于這篇文章討論的范圍.
基本身份驗(yàn)證
原理:
一個(gè)頁面訪問請(qǐng)求
GET /auth/basic/ HTTP/1.1
Host: target
Web服務(wù)器要求用書輸入用戶憑據(jù)(服務(wù)器返回401響應(yīng)頭和’realm’)
HTTP/1.1 401 Authorization Required
Date: Sat, 08 Jun 2013 12:52:40 GMT
WWW-Authenticate: Basic realm="Basic auth Dir"??????????
Content-Length: 401
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1
瀏覽器彈出登錄窗口(包含’realm’),要求用提供用戶名/密碼
GET /auth/basic/ HTTP/1.1
Host: target
Authorization: Basic TGVuZ1dhOjEyMzQ1Ng==?????? //Basic后面就是LengWa:123456經(jīng)過Base64編碼后的字符串
服務(wù)器將用戶輸入的憑據(jù)和服務(wù)器端的憑據(jù)進(jìn)行比較。如果一直則返回所請(qǐng)求頁面的響應(yīng)。
配置: – 以保護(hù)/data/www/auth/basic為例
Step 1: 創(chuàng)建密碼文件,并添加第一個(gè)用戶。
/usr/local/apache/bin> ./htpasswd -c /data/www/auth/basic/user.txt LengWa
New password:??
Re-type new password:??
Adding password for user LengWa
-c = create file
常規(guī)添加不要使用-c選項(xiàng),因?yàn)樗鼤?huì)覆蓋現(xiàn)有的文件。
設(shè)置文件所有權(quán)和權(quán)限(root可以進(jìn)行讀寫,Apache Group只可以讀取)
/data/www/auth/basic > ls -l
-rw-r-----?? 1 root???? httpd????...?? user.txt
注意: 在密碼文件中,密碼是加密存貯的(eg: LengWa:$apr1$MBvROZKM$wP.pdlMonB0P4xGZwl.8G0)。但是在網(wǎng)絡(luò)中是明文傳輸?shù)摹?/p>
Step 2: 配置httpd.conf
<Directory "/data/www/auth/basic">
? ? Options Indexes FollowSymLinks
? ? allowoverride authconfig
? ? order allow,deny
? ? allow from all
</Directory>
Step3: 編輯/data/www/auth/basic/.htaccess
AuthName "Basic Auth Dir"
AuthType Basic
AuthUserFile /data/www/auth/basic/user.txt
require valid-user
重新啟動(dòng)Apache服務(wù)器,訪問 http://127.0.0.1/auth/basic/ 驗(yàn)證加密。
我前面說過這種加密在網(wǎng)絡(luò)中傳輸時(shí)是明文傳輸 Base64 編碼,我不認(rèn)為這是一種加密算法)的。如果你感興趣,可以抓包看看。
消息摘要式身份驗(yàn)證(Digest Authentication)
原理:
Digest Authentication在基本身份驗(yàn)證上面擴(kuò)展了安全性. 服務(wù)器為每一連接生成一個(gè)唯一的隨機(jī)數(shù), 客戶端對(duì)用這個(gè)隨機(jī)數(shù)對(duì)密碼進(jìn)行MD5加密. 然后發(fā)送到服務(wù)器. 服務(wù)器端也用此隨機(jī)數(shù)對(duì)密碼加密, 然后和客戶端傳送過來的加密數(shù)據(jù)進(jìn)行比較.
一個(gè)頁面訪問請(qǐng)求
GET /auth/basic/??HTTP/1.1
Host: target
Web服務(wù)器要求用書輸入用戶憑據(jù)(服務(wù)器返回401響應(yīng)頭和’realm’)
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest realm="Digest Encrypt",
nonce="nmeEHKLeBAA=aa6ac7ab3cae8f1b73b04e1e3048179777a174b3",
opaque="0000000000000000", \
stale=false,
algorithm=MD5,
qop="auth"
?
瀏覽器彈出登錄窗口(包含’realm’), 要求用提供用戶名/密碼
GET /auth/digest/ HTTP/1.1
????Accept: */*
????Authorization:??Digest username="LengWa",
????realm="Digest Encrypt",
????qop="auth",
????algorithm="MD5",
????uri="/auth/digest/",
????nonce="nmeEHKLeBAA=aa6ac7ab3cae8f1b73b04e1e3048179777a174b3",
????nc=00000001,
????cnonce="6092d3a53e37bb44b3a6e0159974108b",
????opaque="0000000000000000",
????response="652b2f336aeb085d8dd9d887848c3314"
服務(wù)器將用戶輸入加密后的憑據(jù)和服務(wù)器端加密后的的憑據(jù)進(jìn)行比較.如果一致則返回所請(qǐng)求頁面的響應(yīng).
配置:
Step 1: 創(chuàng)建密碼文件
語法:
htdiget [-c] passwordfile realm username
?
/usr/local/apache/bin> ./htdigest -c /data/www/auth/digest/ "Digest Encrypt" LengWa
Adding password for LengWa in realm "Digest Encrypt" .
New password:
Re-type new password:
-c = create file
常規(guī)添加不要使用-c選項(xiàng), 因?yàn)樗鼤?huì)覆蓋現(xiàn)有的文件.
設(shè)置文件所有權(quán)和權(quán)限(root可以進(jìn)行讀寫, Apache Group只可以讀取)
/data/www/auth/digest/ > ls -l
-rw-r-----?? 1 root???? httpd????...?? user.txt
user.txt格式: LengWa:Digest Encrypt:d95ea4412b0fb517b25c4c46f32e5a2b
Step2: 配置httpd.conf
<Directory "/data/www/auth/digest">
????Options Indexes FollowSymLinks
????AuthType Digest
????AuthName "Digest Encrypt"?????????? //注意這里的AuthName和上面的realm必須一致(而Basic驗(yàn)證則可以不同). 否則你輸入正確的用戶密碼也無法通過認(rèn)證
????AuthDigestProvider file
????AuthUserFile /data/www/auth/digest/user.txt
????require valid-user
</Directory>
現(xiàn)在基于Digest的驗(yàn)證環(huán)境就搭建好了.
注: 在Basic驗(yàn)證中. 我使用了.htaccess 而在Digest驗(yàn)證中我沒有使用. 只是為了個(gè)人的需要. 你可以根據(jù)自己需要進(jìn)行配置.
疑惑: 對(duì)于在配置Digest httpd.conf時(shí), AuthName 必須和上面的realm還是不是很明白. 為什么必須一致. 如果有哪位大神知道. 望不吝賜教。
總結(jié):
Basic驗(yàn)證方式配置相對(duì)簡(jiǎn)單,但是安全性太低,不適合一些加密要求比較高的站點(diǎn)。
Digest則相反,加密性是很高,但是配置起來還是有一點(diǎn)難度的,所以大家根據(jù)自己需要,選擇不同的加密方式。
?
參考文章:
?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的配置Apache Basic和Digest认证的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tcp Keepalive和HTTP K
- 下一篇: Round-Robin负载均衡算法及其实