# Apache模块 mod_auth_digest
| [说明](#calibre_link-11) | 使用MD5摘要认证(更安全,但是只有最新的浏览器才支持) |
| --- | --- |
| [状态](#calibre_link-12) | 实验(X) |
| [模块名](#calibre_link-13) | auth_digest_module |
| [源文件](#calibre_link-14) | mod_auth_digest.c |
### 概述
这个模块实现了HTTP摘要认证。由于尚未进行过广泛的测试,因此标记为试验模块。
## 使用摘要认证
使用MD5摘要认证很简单。简单的安装认证模块后使用"`AuthType Digest`"和`AuthDigestProvider`代替普通的"`AuthType Basic`"和`AuthBasicProvider` ,再添加一个`AuthDigestDomain`指令包含至少是需要保护的区域的根URI。
可以使用`htdigest`工具来创建和添加(纯文本)用户列表文件。
### 示例:
```
<Location /private/>
AuthType Digest
AuthName "private area"
AuthDigestDomain /private/ http://mirror.my.dom/private2/
AuthDigestProvider file
AuthUserFile /web/auth/.digest_pw
Require valid-user
</Location>
```
### 注意
摘要认证比基本认证更安全,但是直到2004年9月,只有下列最新版本的主流浏览器支持它:[Amaya](http://www.w3.org/Amaya/), [Konqueror](http://konqueror.kde.org/), [MS Internet Explorer 6](http://www.microsoft.com/windows/ie/)(使用查询字符串时会失败,参见"[配合 MS Internet Explorer 6 工作](#calibre_link-951)"), [Mozilla](http://www.mozilla.org), [Netscape 7](http://channels.netscape.com/ns/browsers/download.jsp), [Opera](http://www.opera.com/), [Safari](http://www.apple.com/safari/) 。而[lynx](http://lynx.isc.org/)**不支持**摘要认证。因为摘要认证尚未得到绝大多数浏览器的支持,你应当只将它应用在你可以控制用户浏览器版本的场合。
## 配合 MS Internet Explorer 6 工作
Internet Explorer 6 的摘要认证实现有缺陷,也就是`GET`请求的查询字符串与RFC规范并不兼容。有几个途径来解决这个问题。
第一个途径就是使用`POST`代替`GET`来向服务器传送数据。如果你的程序不会受到这种变化的影响,这是最简单的方法。
从2.0.51版本开始,Apache还在环境变量`AuthDigestEnableQueryStringHack`中提供了一个工作区(workaround)。如果`AuthDigestEnableQueryStringHack`被打开,Apache将采取措施对付Internet Explorer 6 的bug ,将请求URI从摘要比较中移除。使用这个方法将需要类似如下的配置:
### 在MSIE6中使用摘要认证
```
BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
```
参见`BrowserMatch`指令以了解有条件的设置环境变量的更多细节。
## AuthDigestAlgorithm 指令
| [说明](#calibre_link-18) | 选择在摘要认证中用于计算请求和应答的散列值的算法 |
| --- | --- |
| [语法](#calibre_link-19) | `AuthDigestAlgorithm MD5|MD5-sess` |
| [默认值](#calibre_link-24) | `AuthDigestAlgorithm MD5` |
| [作用域](#calibre_link-20) | directory, .htaccess |
| [覆盖项](#calibre_link-66) | AuthConfig |
| [状态](#calibre_link-21) | 实验(X) |
| [模块](#calibre_link-22) | mod_auth_digest |
`AuthDigestAlgorithm`指令选择在摘要认证中用于计算请求和应答的散列值的算法。
`MD5-sess`算法当前尚未实现。
## AuthDigestDomain 指令
| [说明](#calibre_link-18) | 在同一保护区域中需要进行摘要认证的URI |
| --- | --- |
| [语法](#calibre_link-19) | `AuthDigestDomain URI [URI] ...` |
| [作用域](#calibre_link-20) | directory, .htaccess |
| [覆盖项](#calibre_link-66) | AuthConfig |
| [状态](#calibre_link-21) | 实验(X) |
| [模块](#calibre_link-22) | mod_auth_digest |
`AuthDigestDomain`指令用于指定一个或者多个在同一保护区域中需要进行摘要认证的URI(也就是使用相同的区域和用户名/密码信息)。这些被指定的URI只是前缀,也就是说客户端将假定所有位于该URI"之下"的URI亦受到相同用户名/密码的保护。这些被指定的URI可以是绝对URI(也就是包含完整的协议、主机、端口等)或者相对URI。
这个指令_必须_总是被指定为至少包含被保护页面的根URI。省略这个会导致客户端为_每个请求_都发送授权头,除了增加请求的字节大小外,如果`AuthDigestNcCheck`被设为"On",还会影响服务器的性能。
这里指定的URI可以分别指向不同的服务器,在这种情况下客户端将会在这些服务器间共享用户名和密码信息,并且不会提醒用户。
## AuthDigestNcCheck 指令
| [说明](#calibre_link-18) | Enables or disables checking of the nonce-count sent by the server |
| --- | --- |
| [语法](#calibre_link-19) | `AuthDigestNcCheck On|Off` |
| [默认值](#calibre_link-24) | `AuthDigestNcCheck Off` |
| [作用域](#calibre_link-20) | server config |
| [状态](#calibre_link-21) | 实验(X) |
| [模块](#calibre_link-22) | mod_auth_digest |
目前尚未实现。
## AuthDigestNonceFormat 指令
| [说明](#calibre_link-18) | Determines how the nonce is generated |
| --- | --- |
| [语法](#calibre_link-19) | `AuthDigestNonceFormat format` |
| [作用域](#calibre_link-20) | directory, .htaccess |
| [覆盖项](#calibre_link-66) | AuthConfig |
| [状态](#calibre_link-21) | 实验(X) |
| [模块](#calibre_link-22) | mod_auth_digest |
目前尚未实现。
## AuthDigestNonceLifetime 指令
| [说明](#calibre_link-18) | 服务器nonce(当前值)的有效秒数 |
| --- | --- |
| [语法](#calibre_link-19) | `AuthDigestNonceLifetime seconds` |
| [默认值](#calibre_link-24) | `AuthDigestNonceLifetime 300` |
| [作用域](#calibre_link-20) | directory, .htaccess |
| [覆盖项](#calibre_link-66) | AuthConfig |
| [状态](#calibre_link-21) | 实验(X) |
| [模块](#calibre_link-22) | mod_auth_digest |
`AuthDigestNonceLifetime`指令控制服务器nonce(当前值)的有效秒数。当客户端连接服务器时使用了一个过期的nonce(当前值),服务器将返回一个带有"`stale=true`"的401错误(要求重新认证)。如果seconds小于等于"0",那么nonce(当前值)将永远不会过期(强烈反对这么做)。一般这个值应当在30到120之间比较合理(最好不要小于10)。
## AuthDigestProvider 指令
| [说明](#calibre_link-18) | 设置该区域的(摘要)认证支持者(Provider) |
| --- | --- |
| [语法](#calibre_link-19) | `AuthDigestProvider provider-name [provider-name] ...` |
| [默认值](#calibre_link-24) | `AuthDigestProvider file` |
| [作用域](#calibre_link-20) | directory, .htaccess |
| [覆盖项](#calibre_link-66) | AuthConfig |
| [状态](#calibre_link-21) | 实验(X) |
| [模块](#calibre_link-22) | mod_auth_digest |
`AuthDigestProvider`指令设置了该区域的(摘要)认证支持者(Provider)。默认的`file`支持者由`mod_authn_file`模块实现。必须确保所需的认证支持模块存在于服务器中(静态连接或DSO)。
能够提供认证支持者(Provider)的模块如下:`mod_authn_dbm`和`mod_authn_file` 。
## AuthDigestQop 指令
| [说明](#calibre_link-18) | 指定摘要认证的保护质量 |
| --- | --- |
| [语法](#calibre_link-19) | `AuthDigestQop none|auth|auth-int [auth|auth-int]` |
| [默认值](#calibre_link-24) | `AuthDigestQop auth` |
| [作用域](#calibre_link-20) | directory, .htaccess |
| [覆盖项](#calibre_link-66) | AuthConfig |
| [状态](#calibre_link-21) | 实验(X) |
| [模块](#calibre_link-22) | mod_auth_digest |
`AuthDigestQop`指令用于指定使用那个级别的<dfn class="calibre27">保护质量(quality-of-protection)</dfn>。`auth`将只进行认证(用户名/密码);`auth-int`除了认证以外还进行完整性校验(实体的MD5值将被计算和检查);`none`将使用旧的RFC-2069摘要算法(不包含完整性检查);`auth`和`auth-int`可以同时指定,在这种情况下,浏览器将会自己选择使用哪种一种。`none`不推荐使用。
`auth-int`目前尚未支持。
## AuthDigestShmemSize 指令
| [说明](#calibre_link-18) | 为了跟踪客户端而分配的共享内存字节数 |
| --- | --- |
| [语法](#calibre_link-19) | `AuthDigestShmemSize size` |
| [默认值](#calibre_link-24) | `AuthDigestShmemSize 1000` |
| [作用域](#calibre_link-20) | server config |
| [状态](#calibre_link-21) | 实验(X) |
| [模块](#calibre_link-22) | mod_auth_digest |
`AuthDigestShmemSize`指令指定了服务器启动时为了跟踪客户端而分配的共享内存字节数。注意,这个共享内存段不能设置为小于只跟踪_一个_客户端所需要的最小内存数量,这个最小数量取决于你的系统。如果你想知道这个最小值,你只要将`AuthDigestShmemSize`设为"`0`",然后读取重启Apache时返回的错误信息即可。
size通常按照字节计算,但是可以通过加上后缀"`K`"或"`M`"来按照KB或MB计算。比如,以下写法都是一样的:
```
AuthDigestShmemSize 1048576
AuthDigestShmemSize 1024K
AuthDigestShmemSize 1M
```
- Apache HTTP Server Version 2.2 文档 [最后更新:2006年3月21日]
- 版本说明
- 从1.3升级到2.0
- 从2.0升级到2.2
- Apache 2.2 新特性概述
- Apache 2.0 新特性概述
- The Apache License, Version 2.0
- 参考手册
- 编译与安装
- 启动Apache
- 停止和重启
- 配置文件
- 配置段(容器)
- 缓冲指南
- 服务器全局配置
- 日志文件
- 从URL到文件系统的映射
- 安全方面的提示
- 动态共享对象(DSO)支持
- 内容协商
- 自定义错误响应
- 地址和端口的绑定(Binding)
- 多路处理模块
- Apache的环境变量
- Apache处理器的使用
- 过滤器(Filter)
- suEXEC支持
- 性能方面的提示
- URL重写指南
- Apache虚拟主机文档
- 基于主机名的虚拟主机
- 基于IP地址的虚拟主机
- 大批量虚拟主机的动态配置
- 虚拟主机示例
- 深入研究虚拟主机的匹配
- 文件描述符限制
- 关于DNS和Apache
- 常见问题
- 经常问到的问题
- Apache的SSL/TLS加密
- SSL/TLS高强度加密:绪论
- SSL/TLS高强度加密:兼容性
- SSL/TLS高强度加密:如何...?
- SSL/TLS Strong Encryption: FAQ
- 如何.../指南
- 认证、授权、访问控制
- CGI动态页面
- 服务器端包含入门
- .htaccess文件
- 用户网站目录
- 针对特定平台的说明
- 在Microsoft Windows中使用Apache
- 在Microsoft Windows上编译Apache
- Using Apache With Novell NetWare
- Running a High-Performance Web Server on HPUX
- The Apache EBCDIC Port
- 服务器和支持程序
- httpd - Apache超文本传输协议服务器
- ab - Apache HTTP服务器性能测试工具
- apachectl - Apache HTTP服务器控制接口
- apxs - Apache 扩展工具
- configure - 配置源代码树
- dbmmanage - 管理DBM格式的用户认证文件
- htcacheclean - 清理磁盘缓冲区
- htdbm - 操作DBM密码数据库
- htdigest - 管理用于摘要认证的用户文件
- httxt2dbm - 生成RewriteMap指令使用的dbm文件
- htpasswd - 管理用于基本认证的用户文件
- logresolve - 解析Apache日志中的IP地址为主机名
- rotatelogs - 滚动Apache日志的管道日志程序
- suexec - 在执行外部程序之前切换用户
- 其他程序
- 杂项文档
- 与Apache相关的标准
- Apache模块
- 描述模块的术语
- 描述指令的术语
- Apache核心(Core)特性
- Apache MPM 公共指令
- Apache MPM beos
- Apache MPM event
- Apache MPM netware
- Apache MPM os2
- Apache MPM prefork
- Apache MPM winnt
- Apache MPM worker
- Apache模块 mod_actions
- Apache模块 mod_alias
- Apache模块 mod_asis
- Apache模块 mod_auth_basic
- Apache模块 mod_auth_digest
- Apache模块 mod_authn_alias
- Apache模块 mod_authn_anon
- Apache模块 mod_authn_dbd
- Apache模块 mod_authn_dbm
- Apache模块 mod_authn_default
- Apache模块 mod_authn_file
- Apache模块 mod_authnz_ldap
- Apache模块 mod_authz_dbm
- Apache模块 mod_authz_default
- Apache模块 mod_authz_groupfile
- Apache模块 mod_authz_host
- Apache模块 mod_authz_owner
- Apache模块 mod_authz_user
- Apache模块 mod_autoindex
- Apache模块 mod_cache
- Apache模块 mod_cern_meta
- Apache模块 mod_cgi
- Apache模块 mod_cgid
- Apache模块 mod_charset_lite
- Apache模块 mod_dav
- Apache模块 mod_dav_fs
- Apache模块 mod_dav_lock
- Apache模块 mod_dbd
- Apache模块 mod_deflate
- Apache模块 mod_dir
- Apache模块 mod_disk_cache
- Apache模块 mod_dumpio
- Apache模块 mod_echo
- Apache模块 mod_env
- Apache模块 mod_example
- Apache模块 mod_expires
- Apache模块 mod_ext_filter
- Apache模块 mod_file_cache
- Apache模块 mod_filter
- Apache模块 mod_headers
- Apache模块 mod_ident
- Apache模块 mod_imagemap
- Apache模块 mod_include
- Apache模块 mod_info
- Apache模块 mod_isapi
- Apache模块 mod_ldap
- Apache模块 mod_log_config
- Apache模块 mod_log_forensic
- Apache模块 mod_logio
- Apache模块 mod_mem_cache
- Apache模块 mod_mime
- Apache模块 mod_mime_magic
- Apache模块 mod_negotiation
- Apache模块 mod_nw_ssl
- Apache模块 mod_proxy
- Apache模块 mod_proxy_ajp
- Apache模块 mod_proxy_balancer
- Apache模块 mod_proxy_connect
- Apache模块 mod_proxy_ftp
- Apache模块 mod_proxy_http
- Apache模块 mod_rewrite
- Apache模块 mod_setenvif
- Apache模块 mod_so
- Apache模块 mod_speling
- Apache模块 mod_ssl
- Apache模块 mod_status
- Apache模块 mod_suexec
- Apache模块 mod_unique_id
- Apache模块 mod_userdir
- Apache模块 mod_usertrack
- Apache模块 mod_version
- Apache模块 mod_vhost_alias
- Developer Documentation for Apache 2.0
- Apache 1.3 API notes
- Debugging Memory Allocation in APR
- Documenting Apache 2.0
- Apache 2.0 Hook Functions
- Converting Modules from Apache 1.3 to Apache 2.0
- Request Processing in Apache 2.0
- How filters work in Apache 2.0
- Apache 2.0 Thread Safety Issues
- 词汇和索引
- 词汇表
- 指令索引
- 指令速查
- 模块索引
- 站点导航