我们正在尝试为安装在不带 IIS 的 Windows Server 2016 上的 Tomcat 9 服务器提供服务的应用程序设置 HSTS。当我从中加载页面时,开发人员控制台中的响应标头确实包含
strict-transport-security: max-age=31536000;includeSubDomains;preload
。问题是,当运行漏洞扫描时,它会返回错误消息:“远程 Web 服务器未强制执行 HSTS。”。 我们还收到一条消息,指出 TLSv1.0 已启用。
我还应该注意到,Tomcat 提供的页面是使用主域名访问的,该域名会命中负载均衡器,该负载均衡器也充当反向代理,并将所有请求传递给 Tomcat。 我们使用分配给负载均衡器的主域并直接使用 Tomcat 服务器名称(无需负载均衡器)对其进行扫描,并获得相同的扫描结果。
我已将要添加到 Tomcat
server.xml
和
web.xml
文件中的内容包含在内。 任何有关我们做错或遗漏的建议,我们将不胜感激。我们已在 server.xml
文件中包含以下内容:
<!-- For Redirect from HTTP to HTTPS -->
<Connector executor="tomcatThreadPool"
port="80"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443"/>
<!-- SSL Connector -->
<Connector
port="443"
scheme="https"
secure="true"
SSLEnabled="true"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation">
<SSLHostConfig sslProtocol="TLS"
protocols="TLSv1.2+TLSv1.3"
certificateKeystoreFile="G:\keystore\OUR_KEYSTORE_FILE.jks"
certificateKeystorePassword="OUR_KEYSTORE_PASSWORD"
certificateKeystoreType="JKS">
</SSLHostConfig>
</Connector>
我们已经为 HSTS 和重定向配置了
web.xml
文件:
<!-- Enable HSTS -->
<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<init-param>
<param-name>hstsEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>hstsMaxAgeSeconds</param-name>
<param-value>31536000</param-value>
</init-param>
<init-param>
<param-name>hstsIncludeSubDomains</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>hstsPreload</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>antiClickJackingOption</param-name>
<param-value>ALLOW-FROM</param-value>
</init-param>
<init-param>
<param-name>antiClickJackingUri</param-name>
<param-value>https://OUR_PRIMARY_DOMAIN.HERE</param-value>
</init-param>
<async-supported>true</async-supported>
</filter>
<!-- Enable HSTS Filter -->
<filter-mapping>
<filter-name>httpHeaderSecurity</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<!-- for Redirect from HTTP to HTTPS -->
<security-constraint>
<web-resource-collection>
<web-resource-name>Entire Application</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>