您可以仅允许特定的用户或组访问您的 Web 服务器。用户/组访问控制要求用户输入用户名和密码,然后才能访问服务器。服务器会将客户机证书中的信息与目录服务器条目进行比较。
Administration Server 只使用基本验证。如果希望在 Administration Server 上进行客户机验证,必须手动编辑 ACL 文件,将方法更改为 SSL。
用户/组验证由 Web Server 通过读取用户组数据库中的条目来执行。目录服务用来实现访问控制的信息可能来自以下资源之一:
内部平面文件类型数据库
外部 LDAP 数据库
当服务器使用基于 LDAP 的外部目录服务时,对于服务器实例它支持以下类型的用户/组验证方法:
默认
基本
SSL
摘要
其他
当服务器使用基于文件的内部目录服务时,对于服务器实例它支持的用户/组验证方法包括:
默认
基本
摘要
用户/组验证要求用户验证其自身,然后才能访问服务器或 Web 站点上的文件和目录。借助验证,用户可使用客户机证书并通过输入用户名和密码来验证其身份。仅 SSL 通信需要客户机证书。
默认验证是首选方法。“默认”设置使用 server.xml 文件中的默认方法;如果 server.xml 中没有设置,则使用“基本”方法。如果选中“默认”,ACL 规则将不会在 ACL 文件中指定方法。选择“默认”后,您便可通过编辑 obj.conf 文件中的一行文本来轻松更改所有 ACL 的方法。
基本验证要求用户输入用户名和密码来访问 Web 服务器或 Web 站点。这是默认设置。您必须在 LDAP 数据库(如 Sun Java System Directory Server)或文件中创建和存储用户和组列表。所使用的目录服务器不能与 Web 服务器安装在相同的服务器根目录下;您也可以使用安装在远程计算机上的目录服务器。
当用户试图访问 Administration Server 或 Web 站点中具有用户/组验证的资源时,Web 浏览器将显示一个对话框,要求用户输入用户名和密码。服务器将收到加密或未加密的信息,这取决于您的服务器是否启用了加密。
如果使用不带 SSL 加密的基本验证,将在网络中以未加密的文本形式发送用户名和密码。网络包可能会被截取,并且用户名和密码可能会被盗用。基本验证在与 SSL 加密、主机/IP 验证或二者组合时最有效。使用摘要验证可以避免此类问题。
使用安全性证书,服务器可以用两种方式确认用户的身份:
使用客户机证书中的信息作为身份的证明
验证 LDAP 目录中发布的客户机证书(附加验证)
当您将服务器设置为使用证书信息来验证客户机时,服务器将:
首先检查证书是否来自一个信任的 CA。如果不是,验证将失败,事务也将结束。
如果证书来自一个信任的证书授权机构 (certificate authority, CA),则使用 certmap.conf 文件将证书映射到某个用户的条目。
如果证书正确进行了映射,则检查为该用户指定的 ACL 规则。即使证书正确进行了映射,ACL 规则也可能会拒绝该用户的访问。
要求对特定资源的访问控制进行客户机验证与要求对服务器的所有连接进行客户机验证不同。如果将服务器设置为要求对所有连接进行客户机验证,则客户机只需要提供由信任的 CA 颁发的有效证书。如果将服务器的访问控制设置为使用 SSL 方法来验证用户和组,则客户机需要:
提供由信任的 CA 颁发的有效证书
证书必须映射到 LDAP 中的有效用户
访问控制列表必须进行正确评估
要求对访问控制进行客户机验证时,需要为 Web 服务器启用 SSL 加密算法。
要成功访问要求进行 SSL 验证的资源,客户机证书必须来自 Web 服务器信任的 CA。如果 Web 服务器的 certmap.conf 文件被配置为将浏览器中的客户机证书与目录服务器中的客户机证书相比较,则需要在目录服务器中发布客户机证书。不过,certmap.conf 文件也可以配置为仅将证书中的选定信息与目录服务器条目进行比较。例如,您可以配置 certmap.conf 文件,使其仅将浏览器证书中的用户 ID 和电子邮件地址与目录服务器条目进行比较。
只有 SSL 验证方法才需要修改 certmap.conf 文件,因为将对照 LDAP 目录对证书进行检查。而要求对服务器的所有连接进行客户机验证则不必如此。如果选择使用客户机证书,则应增加 magnus.conf 中 AcceptTimeout 指令的值。
可以将服务器配置为使用基于 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 标头并将其插入服务器标头中。