mod_auth_digest在现代Apache中不可用,因RFC 2617已被弃用、Apache 2.4.19+默认禁用、不兼容TLS 1.3,易致500错误或明文降级,且HTTP/2下被浏览器静默跳过。

mod_auth_digest 在现代 Apache 环境中基本不可用,不建议启用或依赖它来提升安全性。 它依赖 RFC 2617 的 MD5 摘要认证,而该机制在 2015 年已被 RFC 7616 明确弃用;Apache 2.4.19+ 默认禁用 mod_auth_digest,且无法与 TLS 1.3 兼容(因缺少 QOP=auth-int 支持),实际部署中极易触发 500 Internal Server Error 或静默降级为明文传输风险。
为什么 mod_auth_digest 启用后返回 500 或直接失败
常见错误日志包含:Invalid command 'AuthDigestProvider', perhaps misspelled or defined by a module not included in the server configuration 或 digest: unknown algorithm 'MD5'。根本原因有三:
- Apache 编译时未启用
--enable-auth-digest(多数 Linux 发行版二进制包已默认排除该模块) - 启用了
mod_ssl但未显式关闭SSLStrictSNIVHostCheck off,导致 TLS 握手阶段 Digest 认证头被截断 - 使用了
AuthDigestAlgorithm SHA-256—— 该指令仅存在于极少数补丁版 Apache 中,标准发行版只认MD5,而MD5在 OpenSSL 1.1.1+ 和 FIPS 模式下被彻底禁用
AuthDigestDomain 配置不当引发跨域泄露
AuthDigestDomain 决定摘要认证凭据可复用的 URL 前缀范围。设为 / 表示整个虚拟主机都接受同一组 nonce,但若站点同时托管多个子应用(如 /api/ 和 /admin/),攻击者可通过诱导用户访问恶意子路径(如 /api/.well-known/xxx)劫持 digest session,重放至管理接口。
- 应严格限定作用域,例如只写
AuthDigestDomain "/admin/" - 禁止使用通配符或父路径覆盖无关资源,
AuthDigestDomain "/"是高危配置 - 若需多路径保护,为每个路径单独配置
<location></location>块并指定唯一AuthDigestNonceLifetime
替代方案:用 mod_authn_core + TLS + 前端 Token 更可靠
真正能落地的安全组合不是修补过时协议,而是绕过它:
- 强制 HTTPS(
Redirect permanent / https://example.com/),确保所有凭证始终加密传输 - 用
mod_authn_core+AuthUserFile配合htpasswd -B(bcrypt)生成密码,比 MD5 digest 更抗爆破 - 对 API 接口改用 JWT 或短期 bearer token,由前端在 Authorization header 中携带
Bearer xxx,后端用mod_lua或反向代理(如 Nginx)校验 - 若必须保留表单登录,用
mod_session+mod_auth_form实现带 CSRF 保护的会话,而非依赖客户端 digest 计算
最常被忽略的一点:即使你成功加载了 mod_auth_digest 并看到 401 WWW-Authenticate 响应头,只要客户端浏览器(Chrome/Firefox/Safari)收到的是 HTTP/2 连接,摘要认证就会被静默跳过——因为 RFC 7540 明确禁止在 HTTP/2 中使用 WWW-Authenticate: Digest。

















