可以将 Proxy Server 配置为使用基于 LDAP 或文件的目录服务执行摘要验证。
摘要验证使用户能够基于用户名和密码进行验证,但不必以明文形式发送用户名和密码。浏览器使用用户密码和 Proxy Server 提供的某些信息,通过 MD5 算法创建摘要值。
当服务器使用基于 LDAP 的目录服务来执行摘要验证时,服务器端也将使用摘要验证插件来计算该摘要值,并且将该值与客户机提供的摘要值进行比较。如果这些摘要值相匹配,用户将通过验证。要进行这种验证,您的目录服务器必须有权访问明文形式的用户密码。Sun Java System Directory Server 具有一个可逆的密码插件,它使用对称的加密算法以加密形式存储数据,这些数据可在稍后被解密成原来的形式。只有目录服务器保存了数据的密钥。
对于基于 LDAP 的摘要验证,您必须启用 Proxy Server 附带的可逆密码插件和特定的摘要验证插件。要将 Proxy Server 配置为可以处理摘要验证,请在 dbswitch.conf 文件(位于 server-root/userdb/ 中)中设置数据库定义的 digestauth 属性。
以下为 dbswitch.conf 文件样例。
directory default ldap://<host_name>:<port> default:binddn cn=Directory Manager default:encoded bindpw *********** default:digestauth on |
或者
directory default ldap://<host_name>:<port>/ default:binddn cn=Directory Manager default:encoded bindpw *********** default:digestauthstate on |
服务器将尝试基于指定的 ACL 方法验证 LDAP 数据库,如摘要验证所示。如果未指定 ACL 方法,当要求进行验证时,服务器将使用摘要验证或基本验证;当不要求进行验证时,服务器将使用基本验证。
下表列出了验证数据库支持以及不支持的摘要验证。
表 8–1 摘要验证的不同情况
ACL 方法 |
验证数据库支持 |
验证数据库不支持 |
---|---|---|
Default 未指定 |
Digest 和 Basic |
Basic |
Basic |
Basic |
Basic |
Digest |
Digest |
ERROR |
在 method=digest 的情况下处理 ACL 时,服务器将尝试通过执行以下操作进行验证:
检查 Authorization 请求标头。如果未找到标头,将生成要求进行摘要验证的 401 响应,并且进程将停止。
检查 Authorization 类型。如果验证类型为 "Digest",服务器将执行以下操作:
检查现时数据 (nonce)。如果现时数据不是此服务器生成的最新有效现时数据,将生成 401 响应,并且进程将停止。如果现时数据过时,将生成包含 stale=true 的 401 响应,并且进程将停止。
通过更改 magnus.conf 文件(位于 server-root/proxy-server_name/config/ 中)中参数 DigestStaleTimeout 的值,可配置现时数据保持不过期的时间。要设置该值,请将下面一行添加到 magnus.conf 中:
DigestStaleTimeout seconds
其中 seconds 表示现时数据被保留的秒数。指定的秒数过后,现时数据将过期并要求用户进行新的验证。
检查领域。如果领域不匹配,将生成 401 响应,并且进程将停止。
如果验证目录是基于 LDAP 的,则检查 LDAP 目录中的用户是否存在;如果验证目录是基于文件的,则检查文件数据库中的用户是否存在。如果未找到用户,将生成 401 响应,并且进程将停止。
从目录服务器或文件数据库中获取 request-digest 值,并查找与客户机的 request-digest 匹配的值。如果不匹配,将生成 401 响应,并且进程将停止。
构造 Authorization-Info 标头并将其插入服务器标头中。