mod_auth_digest已弃用,不建议使用;它基于RFC 2617/7616的MD5摘要认证,虽不传明文密码,但易受MITM攻击、不兼容TLS 1.3和HTTP/2,且服务器密码存储不安全。

mod_auth_digest 提供基于 RFC 7616(原 RFC 2617)的 HTTP 摘要认证,相比 Basic 认证,它不传输明文密码,而是通过客户端与服务器协同计算的响应值完成验证,能有效防范网络窃听。但要注意:它**不能抵御中间人攻击(MITM)**,必须配合 HTTPS 使用,否则依然存在风险。
启用 mod_auth_digest 并配置基础认证域
确保模块已加载(Apache 2.4+ 默认编译进核心,但需确认启用):
- 检查是否启用:
a2enmod auth_digest(Debian/Ubuntu)或确认LoadModule auth_digest_module modules/mod_auth_digest.so在配置中未被注释 - 摘要认证依赖“认证域”(realm)作为密钥派生的关键输入,同一 realm 下所有资源共享一套 nonce 管理逻辑,因此需统一规划 realm 名称(如
"Restricted Area"),避免随意变更 - 在目录或位置块中启用:
<Directory "/var/www/private">
AuthType Digest
AuthName "Restricted Area"
AuthDigestDomain /private/ /private/api/
AuthDigestProvider file
AuthUserFile /etc/apache2/.digestpw
Require valid-user
</Directory>
AuthDigestDomain 明确声明该 realm 覆盖的 URL 路径前缀,影响客户端缓存凭据和服务器 nonce 作用域,务必准确填写(末尾斜杠不可省略)。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
生成兼容的摘要密码文件
Basic 认证的 htpasswd 文件不适用。必须使用 htdigest 工具生成符合 digest 格式的文件:
- 命令格式:
htdigest -c /etc/apache2/.digestpw "Restricted Area" username(-c表示新建;首次后去掉) - 生成的每行形如:
username:Restricted Area:9e00a05b2f94d34c7c9a0e1b2d3c4e5f,其中第三段是 MD5(username:realm:password) 的十六进制值 - 注意:realm 字符串必须与配置中
AuthName完全一致(包括空格、大小写),否则认证失败
调优安全参数防止重放与暴力攻击
默认 nonce 设置较宽松,生产环境建议显式加固:
-
AuthDigestNonceLifetime 300:限制 nonce 有效期为 5 分钟,过期后客户端需重新请求新 nonce -
AuthDigestQop auth:强制使用auth(而非auth-int),平衡安全性与兼容性;现代浏览器普遍支持,且auth-int对请求体完整性校验实际效用有限 -
AuthDigestAlgorithm MD5:保持默认即可(RFC 要求),无需改为 SHA-256(mod_auth_digest 不支持) - 搭配
LimitRequestBody和速率限制模块(如mod_ratelimit或mod_evasive)可缓解暴力尝试
常见问题与验证要点
部署后务必验证行为是否符合预期:
- 用 curl 测试:
curl -v --digest -u user:pass https://yoursite/private/,观察响应头是否含WWW-Authenticate: Digest ...,且返回状态码为 200 而非 401 - 若始终返回 401,检查 error log 中是否提示
failed to fetch user(密码文件路径错)、realm mismatch(realm 不一致)或invalid nonce(时间不同步或 nonce 失效) - 禁用 Basic 回退:确保配置中未同时启用
AuthType Basic,否则客户端可能降级使用不安全方式 - 注意浏览器兼容性:旧版 IE 对 digest 支持不佳,Safari 曾有缓存 realm 凭据的 bug,建议前端明确提示用户刷新或使用隐私窗口测试

















