Composer での ThingWorx モデルの定義 > セキュリティ > Apache Tomcat での HSTS の有効化
Apache Tomcat での HSTS の有効化
Apache Tomcat で HTTP Strict-Transport-Security (HSTS) を有効化する際は、以下の情報を参考にしてください。
概要
HTTP HSTS は、セキュア接続 (HTTPS) を介してのみアクセス可能であることを Web サイトが宣言できるようにするメカニズムです。このメカニズムは RFC6797 によって指定されており、応答ヘッダー Strict-Transport-Security を使用して、その Web サイトで必要なセキュアポリシーについてユーザーエージェント (UA) に通知します。
HSTS は以下の脅威に対応します。
ユーザーブックマークまたは手動入力による http://myDomain.com が中間者攻撃にさらされた。
HSTS は HTTP リクエストを自動的にターゲットドメインの HTTPS にリダイレクトします。
完全に HTTPS を想定した Web アプリケーションに、間違って HTTP リンクが含まれているか、HTTP を介してコンテンツを提供している。
HSTS は HTTP リクエストを自動的にターゲットドメインの HTTPS にリダイレクトします。
中間者攻撃の攻撃者が、無効な証明書を使用して、被害者ユーザーからのトラフィックを傍受し、そのユーザーが不正な証明書を受け取るように仕向けている。
HSTS はユーザーが無効な証明書のメッセージをオーバーライドすることを許可しません。
また、HSTS は HTTP から HTTPS へのリダイレクトを排除するため、アクセス待機時間を減らします。
Strict-Transport-Security ヘッダー:
HTTPS 接続を介して送信された場合にのみ認識されます。非 HTTPS ユーザーエージェントとの互換性を提供するため、ユーザーが以降も HTTP を使用して Web サイトと対話することが許可されます。
max-age ディレクティブが含まれている必要があります。この値は、UA がそのホストを既知の HSTS ホストとして処理する秒数を指定します (値 0 は処理を停止することを意味します)。
これには includeSubdomain ディレクティブが含まれることがあり、これが存在する場合、HSTS ホストおよびそのホストのドメイン名のすべてのサブドメインに HSTS ポリシーが適用されることが UA に通知されます。
サイト所有者がそのドメインをプリロードすることに同意していることを示す preload フラグ。ドメインがプリロードされている場合、ホストが SSL/TLS を使用しなければならないことをブラウザがすでに把握しているので、初回の HTTP から HTTPS へのリダイレクト時など、依然として攻撃が起こりうるわずかな可能性が取り除かれます。サイト所有者はドメインをリスト ( ここ) にサブミットする必要があります。
Tomcat での HSTS
Apache Tomcat v8.0.23 では、Strict-Transport-SecurityX-Frame-Options、および X-Content-Type-Options HTTP ヘッダーを応答に追加する新しい HttpHeaderSecurityFilter が追加されました。web.xml ファイルを介して、ほかのフィルタと同様にこのフィルタを追加して設定できます。フィルタについては ここに説明があります。Tomcat のインストールでは conf/web.xml 内に例が含まれています。以下の例は 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>
Strict-Transport-Security ヘッダーは、UA が HTTPS を介して Web サイトにアクセスしている場合にのみ返されるので、Tomcat には SSL/TLS が設定されていなければなりません (Tomcat のセキュアセットアップについては、 ここを参照してください)。Strict-Transport-Security は接続が安全な場合にのみ返されるので、Web サイトの所有者は以下を決定する必要があります。
後方互換性のために、安全でない接続を介しても Web サイトを提供するか。
安全でない接続を安全な接続にリダイレクトするか (推奨)。
2 つ目の場合、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 属性が正しいポートを指していることを確認します。コネクタが定義されていない場合は、追加します。これは次のようになります。
<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>