使用HSTS的HTTPS的Tomcat 9配置

ddrv8njm  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(414)

我们正在尝试为安装在Windows Server 2016上的Tomcat 9服务器提供的应用程序设置HSTS。当我从它加载一个页面时,在开发人员控制台中,不包括strict-transport-security: max-age=31536000;includeSubDomains;preload。问题是,当运行漏洞扫描时,它会返回错误消息 “The remote web server is not enforcing HSTS."。我们还收到消息TLSv1。0已启用。
我还应该注意到,Tomcat提供的页面是使用主域名访问的,该主域名会访问负载平衡器,也用作反向代理,并将所有请求传递给Tomcat。我们已经使用分配给负载平衡器的主域名以及直接使用Tomcat服务器名称(不使用负载平衡器)进行了扫描,并获得了相同的扫描结果。
我已经将我们要添加到Tomcat server.xmlweb.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>
yjghlzjz

yjghlzjz1#

问题是,如果您尝试使用http访问您的url,那么应该会将您重定向到https,您使用https的第一个请求将在响应报头中显示,如Non-Authoritative-Reason:HSTS,然后您可以看到第二个请求将使用https发送到相同的端点,因为您将所有80定向到443,在那里您可以看到相关的标头。

相关问题