一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

怎样使用 Apache 的 AuthType Digest 实现摘要式认证

时间:2026-07-14 08:59:51 编辑:袖梨 来源:一聚教程网

Apache的AuthType Digest虽比Basic更安全,但因HTTP/2下被浏览器忽略、需严格匹配AuthDigestDomain、realm名与密码文件完全一致等限制,现代环境已不推荐作为主力认证方案。

Apache 的 AuthType Digest 确实能比 Basic 认证避免明文传密码,但它在现代环境中已严重受限,不推荐作为主力认证方案。核心问题不是配置不会,而是浏览器(Chrome/Firefox/Safari)在 HTTP/2 下会直接忽略 WWW-Authenticate: Digest 响应头——这是 RFC 7540 的强制行为,不是 bug。若你坚持使用,必须满足几个硬性前提并严格规避常见陷阱。

确保运行在 HTTP/1.1 且 HTTPS 已启用

Digest 认证必须搭配 HTTPS,否则中间人可截获 nonce 并重放请求;同时它无法在 HTTP/2 下工作。验证方式:用 curl -v https://yoursite.com/protected 查看响应首行是否为 HTTP/1.1 401。如看到 HTTP/2 401,需临时在虚拟主机中加:

  • Protocols http/1.1(仅测试用,生产禁用)
  • 确认 SSL 证书有效、域名匹配,且 Apache 启用了 mod_ssl

AuthDigestDomain 必须与访问地址精确匹配

这是 401 循环、反复弹窗的最常见原因。浏览器只在请求 URL 路径前缀与 AuthDigestDomain 完全一致时才复用 nonce。例如:

  • 用户访问 https://admin.example.com/settings/AuthDigestDomain 必须写 https://admin.example.com//settings/(末尾斜杠不可少)
  • 不能写成 /example.comhttps://admin.example.com(缺末尾斜杠)
  • 多个路径要分别保护:<Location "/admin/"> 块内配独立 AuthDigestDomain "/admin/"

密码文件生成与 realm 名称必须一字不差

摘要认证依赖 username:realm:password 的 MD5 哈希值,任何字符差异都会导致失败:

  • 生成命令必须带英文双引号:htdigest -c /etc/apache2/.htdigest "Restricted Area" username
  • 配置中的 AuthName "Restricted Area" 字符串必须与上一步引号内内容完全相同(空格、大小写、标点均不可变)
  • 生成的 .htdigest 文件每行格式为:username:Restricted Area:9e00a05b2f94d34c7c9a0e1b2d3c4e5f

基础配置示例与关键安全加固

以下是最小可行配置(放在 <Directory><Location> 块内):

  • AuthType Digest
  • AuthName "Restricted Area"(必须和 htdigest 命令中的一致)
  • AuthDigestProvider file
  • AuthUserFile /etc/apache2/.htdigest
  • AuthDigestDomain /private/(按实际路径调整,结尾斜杠必有)
  • AuthDigestNonceLifetime 300(限制 nonce 有效期为 5 分钟)
  • AuthDigestQop auth(禁用 auth-int,提升兼容性)
  • Require valid-user

注意:mod_auth_digest 模块需已启用(Debian/Ubuntu 执行 a2enmod auth_digest),且 Apache 2.4+ 默认编译进核心,但可能被注释掉。

热门栏目