可以将服务器配置为使用基于 LDAP 或文件的目录服务执行摘要验证。
通过摘要验证,用户可以基于用户名和密码进行验证,而不必以明文形式发送用户名和密码。浏览器使用用户的密码和 Web 服务器提供的某些信息,利用 MD5 算法来创建摘要值。
当服务器使用基于 LDAP 的目录服务来执行摘要验证时,服务器端将使用摘要验证插件来计算该摘要值,并且将该值与客户机提供的摘要值进行比较。如果这些摘要值相匹配,用户将通过验证。要进行这种验证,目录服务器需要访问明文形式的用户密码。Sun Java System Directory Server 具有一个可逆的密码插件,它使用对称的加密算法以加密形式存储数据,这些数据可在稍后被解密成原来的形式。只有 Directory Server 保存了数据的密钥。
对于基于 LDAP 的摘要验证,需要启用服务器附带的可逆密码插件和特定的摘要验证插件。要配置 Web 服务器以处理摘要验证,请设置 dbswitch.conf 中数据库定义的 digestauth 属性。
如果未指定 ACL 方法,当要求进行验证时,服务器将使用摘要验证或基本验证;当不要求进行验证时,服务器将使用基本验证。这是首选方法。
表 7–1 摘要验证的不同情况
ACL 方法 |
验证数据库支持摘要验证 |
验证数据库不支持摘要验证 |
---|---|---|
"default" 未指定 |
摘要和基本 |
基本 |
"basic" |
基本 |
基本 |
"digest" |
摘要 |
错误 |
处理 method = digest 的 ACL 时,服务器将尝试通过以下操作进行验证:
检查 Authorization 请求标头。如果未找到,将生成要求进行摘要验证的 401 响应,并且进程将停止。
检查 Authorization 类型。如果验证类型是摘要验证,服务器将:
检查 nonce。如果无效,将刷新此服务器生成的 nonce 并生成 401 响应,且进程将停止。如果已过期,将生成 stale=true 的 401 响应,且进程将停止。
可以通过更改位于 server_root/https-server_name /config/ 下 magnus.conf 文件中 DigestStaleTimeout 参数的值,来配置 nonce 保持刷新的时间。要设置该值,请将下面一行文本添加到 magnus.conf 中:
其中 seconds 表示 nonce 将保持刷新的秒数。指定的秒数过后,nonce 将到期并要求用户进行新的验证。
检查领域。如果领域不匹配,将生成 401 响应,且进程将停止。
如果验证目录是基于 LDAP 的,则检查 LDAP 目录中的用户是否存在;如果验证目录是基于文件的,则检查文件数据库中的用户是否存在。如果未找到,将生成 401 响应,且进程将停止。
从目录服务器或文件数据库获取请求/摘要值,并检查是否与客户机的请求/摘要值匹配。如果不匹配,将生成 401 响应,且进程将停止。
构造 Authorization-Info 标头并将其插入服务器标头中。