我们有一台运行 Apache 和 Tomcat 的 Windows 服务器,启用了 mod_jk。Tomcat 应用程序运行良好,单独的 PHP 应用程序(在 Apache 下)也运行良好。我们在 Apache 下安装了一个商业 SSL 证书,并在 httpd-ssl.conf 文件中创建了一个指令。所有这一切都运行良好。
如果我们直接浏览https://www.domain.com/app/foo/bar它运行正常,所以我们知道证书正在工作。我们的问题是我们希望某些页面(特别是 JSP 页面)在 https 下加载。我们尝试将 .htaccess 文件放在正确的文件夹中(我们认为 servlet 位于其中),但没有任何作用,大概是因为 Tomcat 没有为这些页面提供服务,Apache 才是(这是正确的想法吗?)。所以,我们很困惑,不知道应该在哪里配置规则(?)以强制某些 JSP 页面使用 https,而其他页面则不行。大概 Apache 应该会处理这个问题,但是由于 .htaccess 文件不起作用,还有其他选择吗?
答案1
我想知道 apache/mod_jk 是否已配置,以便在 .htaccess 更改有机会发出重定向到 https 之前,请求匹配*.jsp
或/webappdir/*.jsp
传递给 tomcat。
我思考您将需要在 tomcat web.xml 中添加安全约束,以便将与 url 模式 /webappdir/*.jsp 匹配的请求设置为使用机密传输保证。(至少,servlet 和 jsp 规范似乎假设您要这样做)我现在没有可用的系统,但也许您的 web.xml 中的以下内容可能会起作用:
// Sample Security Constraint
<security-constraint>
<web-resource-collection>
<web-resource-name>require ssl</web-resource-name>
<url-pattern>/webappdir/*.jsp</url-pattern>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</web-resource-collection>
</security-constraint>
警告:我对 url 模式不是 100% 确定 — 您可能需要在这里进行一些实验。如果您不想对所有 jsp 进行 SSL 加密,则最终可能会得到更长的 url 模式条目列表。另外,我不记得 tomcat 是否发出 301 重定向,建议浏览器使用 https 重新跟踪链接,或者 tomcat 是否发出其他状态代码。
当然,ssl 不会添加那开销太大,所以你可以加密整个网站。这可能会让更注重安全的访问者更开心。