Composer 中的 ThingWorx 模型定义 > 安全 > 启用 Apache Tomcat 中的 HSTS
启用 Apache Tomcat 中的 HSTS
要启用 Apache Tomcat 中的强制安全传输技术 (HSTS),PTC 建议使用下面提供的信息。
简介
HTTP HSTS 是一种允许网站声明仅可通过安全连接 (HTTPS) 才能访问的机制。该机制由 RFC6797 指定并使用响应标题“强制安全传输技术”通知用户代理 (UA) 网站要求的安全策略。
HSTS 可处理以下威胁:
http://myDomain.com 加入书签或手动输入该网址的用户很可能受到中间人攻击者的攻击。
HSTS 会自动将 HTTP 请求重定向至 HTTPS 来访问目标域。
预设为纯 HTTPS 的 Web 应用程序,意外包含 HTTP 链接或通过 HTTP 提供内容。
HSTS 会自动将 HTTP 请求重定向至 HTTPS 来访问目标域。
中间人攻击者会尝试使用无效证书拦截受害者用户的通信,并希望用户接受错误证书。
HSTS 不允许用户覆盖无效证书消息。
另外,HSTS 可以消除 HTTP → HTTPS 重定向,从而降低访问延迟。
严格传输安全标题:
仅当通过 HTTPS 连接发送时才会识别。网站仍可以让用户与使用 HTTP 的网站交互,以提供与非 HTTPS 用户代理的兼容性。
必须包含一个 max-age 指令。值会指定 UA 将主机视为已知 HSTS 主机的秒数 (值为 0 表示停止处理)。
其中包含 includeSubdomain 指令,该指令如果存在,则表示 HSTS 政策应用至 HSTS 主机以及主机域名称的任何子域的 UA。
预加载标志表示站点所有者同意对其域进行预加载。预加载域后,浏览器已注意主机需要使用 SSL/TLS,因此会移除仍然可能会发生攻击的小窗口:初始 HTTP → HTTPS 重定向。站点所有者必须将域提交到列表 ( 此处)。
Tomcat 中的 HSTS
Apache Tomcat v8.0.23 提供了向响应添加 Strict-Transport-SecurityX-Frame-OptionsX-Content-Type-Options HTTP 标题的新 HttpHeaderSecurityFilter。像任何其他筛选器一样,可通过 web.xml 文件添加和配置该筛选器。筛选器的说明可在 此处以及 conf/web.xml 中示例随附的 Tomcat 安装中找到。下面的示例是 web.xml 文件中的一段,可用于启用 Tomcat 中的 HSTS:
<!-- ================== Built In Filter Definitions ===================== -->

<!-- A filter that sets various security related HTTP Response headers. -->
<!-- This filter supports the following initialization parameters -->
<!-- (default values are in square brackets): -->
<!-- -->
<!-- hstsEnabled Should the HTTP Strict Transport Security -->
<!-- (HSTS) header be added to the response? See -->
<!-- RFC 6797 for more information on HSTS. [true] -->
<!-- -->
<!-- hstsMaxAgeSeconds The max age value that should be used in the -->
<!-- HSTS header. Negative values will be treated -->
<!-- as zero. [0] -->
<!-- -->
<!-- hstsIncludeSubDomains -->
<!-- Should the includeSubDomains parameter be -->
<!-- included in the HSTS header. -->
<!-- -->
<!-- antiClickJackingEnabled -->
<!-- Should the anti click-jacking header -->
<!-- X-Frame-Options be added to every response? -->
<!-- [true] -->
<!-- -->
<!-- antiClickJackingOption -->
<!-- What value should be used for the header. Must -->
<!-- be one of DENY, SAMEORIGIN, ALLOW-FROM -->
<!-- (case-insensitive). [DENY] -->
<!-- -->
<!-- antiClickJackingUri IF ALLOW-FROM is used, what URI should be -->
<!-- allowed? [] -->
<!-- -->
<!-- blockContentTypeSniffingEnabled -->
<!-- Should the header that blocks content type -->
<!-- sniffing be added to every response? [true] -->
<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<async-supported>true</async-supported>
<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>
</filter>

<!-- The mapping for the HTTP header security Filter -->
<filter-mapping>
<filter-name>httpHeaderSecurity</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
“强制安全传输技术”标题仅在 UA 通过 HTTPS 访问网站时才会返回,因此必须使用 SSL/TLS 配置 Tomcat (请参阅 此处的安全 Tomcat 设置)。由于强制安全传输技术仅会在连接安全时才会返回,因此网站所有者必须确定以下内容:
他们是否也通过向后兼容性的不安全连接提供网站内容。
他们是否将不安全连接重定向到安全连接 (所需的)。
在第二种情况下,可以通过添加 web.xml 中的安全约束并在 server.xml 中添加重定向来设置 Tomcat 中的重定向。例如:
<security-constraint>
<web-resource-collection>
<web-resource-name>twx-portal</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
将 HTTPS 设置为 HTTP 重定向 (可选)
要强制 HTTP 通信以重定向到安全连接,请确保在 server.xml 中定义的 HTTP 连接器具有 redirectPort 属性集以指向正确的端口。如果未定义连接器,请予以添加。其形式如下:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
WEB-INF/web.xml 中添加安全约束:
<security-constraint>
<web-resource-collection>
<web-resource-name>twx-portal</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>