14. 考虑对 Web 服务器到 WebSphere Application Server 的 HTTP 链路进行身份验证
WebSphere Application Server Web 服务器插件将来自 Web 服务器的请求转发到目标应用 服务器。在默认情况下,如果到 Web 服务器的通信是通过 HTTPS 完成的,则插件在将请求转 发到应用服务器时会自动地使用 HTTPS,从而保护其机密性。
另外,更谨慎的做法是将应用服务器(它包含一个小的嵌入式 HTTP 监听器)配置为只接受 来自已知 Web 服务器的请求。这可以防止各种绕过 Web 服务器前或 Web 服务器中的任何安全 性检查的暗中攻击,创建一个可信的网络路径。这种情况看似不太可能出现,但确实存在这种 可能性。无法一一列举所有场景,下面是一些例子:
有一个身份验证代理服务器,它仅仅将用户 ID 作为 HTTP 头发送出去,而不发送任何身份 验证信息。可以直接访问 Web 容器的入侵者只需要提供这一相同的头,就可以成为任何人。( IBM Tivoli Access Manager WebSEAL 不存在这种漏洞。)
有一个代理服务器,它执行重要的授权,以很粗的粒度限制谁可以访问什么应用程序。
有一个代理服务器,它执行重要的审计,不希望它被绕过。
像前一小节讨论的一样,使用客户机证书向 Web 服务器验证身份。
要创建从 Web 服务器到应用服务器的可信网络路径,需要配置应用服务器 Web 容器 SSL 配置以使用客户机身份验证。一旦确保了正在使用客户机身份验证,就需要确保只有可信的 Web 服务器才能联系 Web 容器。要实现这一点,必须通过应用 只使用 SSL 限制访问 中介绍 的 SSL 技巧来限制具有访问权限的群体。具体地说,需要执行以下操作:
为 Web 容器创建一个密钥存储库和信任存储库,为 Web 服务器插件创建一个密钥存储库。
从所有密钥存储库(包括信任存储库)删除所有现有的签名证书。此时,不能使用任何密钥 存储库来检验证书。这样做是有意的。
在这两个密钥存储库中创建自签名证书,并只导出该证书(而不是私钥)。一定要记录这些 证书的到期时间。当插件证书到期之后,它就不能联系 Web 容器了!将从 Web 容器密钥存储 库中导出的证书导入到插件密钥存储库中。将插件证书导入到 Web 容器信任存储库中。现在, 每一端都只包含一个签名证书。这意味着只能使用它们检验一个证书 —— 为对方创建的自签 名证书。
将新创建的密钥存储库安装到 Web 容器和 Web 服务器插件中。
15. 不要在生产环境中运行示例
WebSphere Application Server 附带了几个非常好的示例,它们演示 WebSphere Application Server 的各个部分。这些示例不是为在生产环境中使用准备的。不要在生产环境 中运行它们,因为它们会带来严重的安全风险。特别是 showCfg 和 snoop Servlet 会向外部 人员提供大量关于您的系统的信息。这正是您不希望潜在的入侵者获得的信息。只要不在生产 环境中运行 server1(它包含这些示例),就很容易解决这个问题。如果使用的是 WebSphere Application Server Base,实际上应该从 server1 中删除这些示例。