Apache常见的用户认证可以分为下面三种:

  • 基于IP,子网的访问控制(ACL)
  • 基本用户验证(Basic Authentication)
  • 消息摘要式身份验证(Digest Authentication)

消息摘要式身份验证(Digest Authentication)

Digest Authentication在基本身份验证上面扩展了安全性。服务器为每一连接生成一个唯一的随机数,客户端对用这个随机数对密码进行MD5加密,然后发送到服务器,服务器端也用此随机数对密码加密,然后和客户端传送过来的加密数据进行比较。

1. 发送页面访问请求

Request URL:http://localhost/config/

Request method:GET

2. Web服务器要求用书输入用户凭据(服务器返回401响应头和’realm’域)

HTTP/1.1 401 Unauthorized
Date: Tue, 01 Jun 2021 07:17:51 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1;mode=block
WWW-Authenticate: Digest realm="Digest Encrypt", nonce="C9zdI6/DBQA=b6e73f0db8e3966873cc961fc22031b43e02aab6", algorithm=MD5, qop="auth"
Content-Length: 381
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

3. 浏览器弹出登录窗口(包含’realm’), 要求用提供用户名/密码

4.输入用户名密码后的请求

Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Authorization: Digest username="Admin", realm="Digest Encrypt", nonce="C9zdI6/DBQA=b6e73f0db8e3966873cc961fc22031b43e02aab6", uri="/config/", algorithm=MD5, response="ae7dc868b37313788a24d2e6e0094154", qop=auth, nc=00000001, cnonce="001945ca0da1ba75"

5.服务器将用户输入加密后的凭据和服务器端加密后的的凭据进行比较,如果一致则返回所请求页面的响应

HTTP/1.1 200 OK
Date: Tue, 01 Jun 2021 08:26:28 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1;mode=block
Authentication-Info: rspauth="a04006ede76a798709c2ea1c5c7533bb", cnonce="777276a0e05dcab9", nc=00000002, qop=auth
Content-Length: 5089
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html;charset=UTF-8


配置Apache

1. 创建密码文件

htdiget [-c] passwordfile realm username

D:\Softwares\Apache24\bin> htdigest.exe -c \ "Digest Encrypt" Admin

Adding password for Admin in realm Digest Encrypt.

New password: ********
Re-type new password: ********

-c = create file

常规添加不要使用-c选项,,因为它会覆盖现有的文件。

文件内容格式:Admin:Digest Encrypt:ded139b4abeb56c14a30ff0a07e27010

2. 配置httpd.conf

# The 'AuthName' and the 'Realm' must be the same (BASIC validation can be different). 
# Otherwise correct user password still will not pass the authentication.
<Directory "${DocumentRoot}\config">
    Options Indexes FollowSymLinks
    AuthType Digest
    AuthName "Digest Encrypt"
    AuthUserFile "D:\digest.txt"
    require valid-user
    AllowOverride None
</Directory>

3. 认证模块配置

查看httpd.conf里面是否有

LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule auth_basic_module modules/mod_auth_basic.so

首先确认要有mod_auth_digest.so,这个没有就要重新编译apache。

其次确保把mod_auth_basic.so这行给注释掉。因为apache默认是用basic来认证的,如果不注释的话,即使配置好了digest认证,也不会成功。两种认证方法只能二选一。


WWW-Authenticate Response Header

If a server receives a request for an access-protected object, and an acceptable Authorization header is not sent, the server responds with a "401 Unauthorized" status code, and a WWW-Authenticate header as per the framework defined above, which for the digest scheme is utilized as follows.

如果服务器收到对受访问保护对象的请求,并且没有发送可接受的授权头,则服务器会以 "401未授权 "状态代码和WWW-Authenticate头作为回应。

      challenge        =  "Digest" digest-challengedigest-challenge  = 1#( realm | [ domain ] | nonce |[ opaque ] |[ stale ] | [ algorithm ] |[ qop-options ] | [auth-param] )domain            = "domain" "=" <"> URI ( 1*SP URI ) <">URI               = absoluteURI | abs_pathnonce             = "nonce" "=" nonce-valuenonce-value       = quoted-stringopaque            = "opaque" "=" quoted-stringstale             = "stale" "=" ( "true" | "false" )algorithm         = "algorithm" "=" ( "MD5" | "MD5-sess" |token )qop-options       = "qop" "=" <"> 1#qop-value <">qop-value         = "auth" | "auth-int" | token
scheme 说明
   realm

显示给用户的一个字符串,以便他们知道使用哪一个用户名和密码。这个字符串至少应该包含的名称,还可能包括表示可能有权限的用户集合。

例:"registered_users@gotham.news.com"。

nonce

服务器每次作出401响应时生成的唯一数据字符串。

nonce对客户端来说是不透明的。

参考链接

1. The WWW-Authenticate Response Header

配置Apache Digest认证相关推荐

  1. 基于应用程序级的Apache认证配置(普通认证篇)

    Apache服务器提供了两种用户认证方式,即普通认证和摘要认证.在网上有很多讲如何配置Apache普通认证的文章,但是它们几乎都是类似告诉你如何去保护某个文件夹的文件之类的配置方法. 如果你的需求是对 ...

  2. 配置Apache Basic和Digest认证

    转载:http://blog.jobbole.com/41519/ 在伯乐在线看到一篇<在Nginx下对网站进行密码保护>文章, 正好和自己这两天研究的问题有些相同点.我侧重研究的是如何破 ...

  3. 尝试debian-9.13.0-amd64下apache和proftpd用openldap整合按组认证笔记之五:apache配置openldap组认证、h5ai、关闭PHP解析

    感觉proftpd对openldap的支持已经有点过时了,2013年以后就再没更新了 https://github.com/proftpd/mod_ldap 居然还必须用posixGroup/gidN ...

  4. Apache2 Windows安装与HTTP Server Digest 认证

    一.Apache2 Windows安装 1.官网下载Windows文件包 Download - The Apache HTTP Server Project 前三个皆可选择 2.下载解压文件包 也可以 ...

  5. Apache用户认证,域名跳转

    2019独角兽企业重金招聘Python工程师标准>>> 11月15日任务 11.18 Apache用户认证 11.19/11.20 域名跳转 11.21 Apache访问日志 11. ...

  6. 11.18 Apache用户认证 11.19/11.20 域名跳转 11.21 Apache访问日志

    2019独角兽企业重金招聘Python工程师标准>>> 11.18 Apache用户认证 htpasswd命令 >htpasswd命令是Apache的Web服务器内置工具,用于 ...

  7. RHEL4- WEB服务(十二)用户访问apache服务器认证

    RHEL4- WEB服务(十二)用户访问apache服务器认证   有些时候网站上的内容不是希望所有的用户都可以访问,由于网页内容性质的不同,会对来访的用户有所分类,网站的提供方希望部分网页内容只提供 ...

  8. PHP开发环境配置:安装与配置Apache、PHP、MySQL、PhpMyAdmin

      目标 Ü        在Windows上安装与配置MySQL Ü        在Windows上安装与配置Apache Ü        在Windows上安装与配置PHP 一般情况下,使用P ...

  9. 如何配置Apache虚拟主机?(基于IP、基于端口、基于域名)

    一.Apache虚拟机配置前的准备工作 1.下载yum源 2.安装yum包 3.安装httpd包 4.查看并关闭selinux 5.取消中心主机 cd /etc/httpd/conf vim http ...

  10. 84.LAMP的apache用户认证,域名跳转,日志文件

    apache用户认证 PS:其实没有....用处的... 命令描述 htpasswd命令是Apache的Web服务器内置工具,用于创建和更新储存用户名.域和用户基本认证的密码文件. 命令语法 htpa ...

最新文章

  1. SDNU 1462.时间转换
  2. 电脑开机老是显示explorer.exe文件损坏
  3. 基于LSTM的股票价格预测(完整金融类代码)
  4. Dev C++ 无法调试问题的解决——小白也能看懂!
  5. SAP Fiori Elements - how drop down list with description is correctly rendered
  6. [jQuery] event.stopPropagation()报错
  7. ajax处理返回的xml数据,使用AJAX调用WebService返回xml不返回json原因以及解决办法...
  8. RHEL6 下Cfengine V3 安装测试1
  9. 云图说|初识ModelArts开发者生态社区——AI Gallery
  10. SQL Server不允许保存更改【解决】
  11. 变量覆盖(超详细!)
  12. js 区分中英文输入法(如中英文括号)
  13. android系统应用开发常用的adb命令个人收藏集锦(不断更新)
  14. html css javascript七夕情人节表白网页【樱花雨3D相册】超好看
  15. 用python画皮卡丘代码-用python画一只可爱的皮卡丘实例
  16. Apue学习:高级I/O
  17. 华院计算|切比雪夫,他带起了俄罗斯现代数学的发展
  18. Vultr CentOS主机无法登录/循环登录/SSH拒绝连接以及使用Finnix恢复系统
  19. 使用 HTML、CSS 和 JavaScript 制作模拟时钟(初学者教程)
  20. 为什么GSM下行的频率要比上行的频率高呢

热门文章

  1. 从零开始写一个Jison解析器(6/10):解析,而不是定义语法
  2. html页面自动滑动,html实现页面滑动
  3. 周集中团队Nature子刊中网络图布局的R语言可视化复现
  4. 麒麟信安携手华为支撑国家电网首批数字换流站试点项目安全高效运行
  5. 如何自给自足获取磁力种子
  6. ARMA模型结合PSO算法进行股票预测
  7. Predicting Ship T rajectory Based on Neural Networks UsingAIS Data
  8. 服务器增加承载能力,关于服务器承载能力(并发数/CPU100%)
  9. CNN-VGG16图片性别年龄识别(说白了就是图片分类)
  10. 使用gitbook时graceful-fs报错:TypeError: cb.apply is not a function的解决方案