Composer의 ThingWorx 모델 정의 > 보안 > Apache Tomcat에서 HSTS 활성화
Apache Tomcat에서 HSTS 활성화
Apache Tomcat에서 HSTS(HTTP Strict-Transport-Security)를 활성화하려면 아래에 제공된 정보를 사용하는 것이 좋습니다.
소개
HTTP HSTS는 웹 사이트가 보안 연결(HTTPS)을 통해서만 액세스할 수 있음을 선언하는 메커니즘입니다. 이 메커니즘은 RFC6797에 의해 지정되며, 응답 머리글 Strict-Transport-Security를 사용하여 사용자 에이전트(UA)에게 웹 사이트에 필요한 보안 정책을 알립니다.
HSTS는 다음과 같은 위협을 해결합니다.
사용자가 http://myDomain.com을 책갈피로 지정하거나 수동으로 입력하며, 중간자 공격자의 대상이 됩니다.
HSTS는 대상 도메인에 대한 HTTP 요청을 HTTPS로 자동으로 리디렉션합니다.
전적으로 HTTPS용으로 제작된 웹 응용 프로그램에서도 의도치 않게 HTTP 링크를 포함하거나 HTTP를 통해 콘텐츠를 제공하기도 합니다.
HSTS는 대상 도메인에 대한 HTTP 요청을 HTTPS로 자동으로 리디렉션합니다.
중간자 공격자는 잘못된 인증서를 사용하여 피해자 사용자로부터 트래픽을 가로채려고 시도하며, 사용자가 잘못된 인증서를 수락하기를 기대합니다.
HSTS는 사용자가 잘못된 인증서 메시지를 재정의하는 것을 허용하지 않습니다.
또한 HSTS는 HTTP → HTTPS 리디렉션을 제거하므로 액세스 대기 시간을 줄입니다.
Strict-Transport-Security 머리글은 다음과 같습니다.
HTTPS 연결을 통해 전송할 때에만 인식됩니다. 웹 사이트는 여전히 사용자가 HTTP를 통해 웹 사이트와 상호 작용하도록 허용하여 HTTPS가 아닌 사용자 에이전트와의 호환성을 제공할 수 있습니다.
최대 기간 지시문이 포함되어야 합니다. 이 값은 UA가 호스트를 알려진 HSTS 호스트로 처리하는 시간(초)을 지정합니다(값 0은 처리 중지를 의미함).
여기에는 HSTS 정책이 HSTS 호스트 및 해당 호스트 도메인 이름의 하위 도메인에 적용됨을 UA에게 알리는 includeSubdomain 지시문(있는 경우)이 포함되어 있을 수 있습니다.
사이트 소유자가 도메인을 미리 로드하는 것에 동의했음을 나타내는 미리 로드 플래그입니다. 도메인이 미리 로드되면 브라우저에서는 호스트가 SSL/TLS를 사용해야 한다는 점을 이미 알고 있으므로, 초기 HTTP → HTTPS 리디렉션과 같이 공격이 계속 발생할 수 있는 작은 창을 제거합니다. 사이트 소유자는 목록( 여기)에 도메인을 제출해야 합니다.
Tomcat의 HSTS
Apache Tomcat v8.0.23은 응답에 Strict-Transport-Security, X-Frame-OptionsX-Content-Type-Options HTTP 머리글을 추가하는 새 HttpHeaderSecurityFilter를 제공합니다. 다른 필터와 같이 web.xml 파일을 통해 필터를 추가하고 구성할 수 있습니다. 필터에 대한 설명은 여기에서 확인할 수 있으며, Tomcat 설치는 conf/web.xml의 예와 함께 제공됩니다. 다음 예는 Tomcat에서 HSTS 활성화를 허용하는 web.xml 파일의 코드 조각입니다.
<!-- ================== 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>
Strict-Transport-Security 머리글은 UA가 HTTPS를 통해 웹 사이트에 액세스할 경우에만 반환되므로, Tomcat은 SSL/TLS로 구성되어야 합니다(보안 Tomcat 설정은 여기 참조). Strict-Transport-Security는 연결이 보안된 경우에만 반환되므로, 웹 사이트의 소유자는 다음을 결정해야 합니다.
이전 버전과의 호환성을 위해 비보안 연결을 통해서도 웹 사이트에 제공할지 여부
비보안 연결을 보안 연결로 리디렉션할지 여부(선호됨)
두 번째 경우에는 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" />
HTTP에서 HTTPS로 리디렉션 설정(선택 사항)
HTTP 트래픽이 보안 연결로 리디렉션되도록 하려면 server.xml에 정의된 HTTP 커넥터에 있는 redirectPort 속성이 올바른 포트를 가리키도록 설정되어야 합니다. 커넥터가 정의되지 않은 경우 추가합니다. Tt는 다음과 유사해야 합니다.
<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>