DigiCert証明書の正規代理店株式会社アールエムエス
DigiCert サーバー証明書利用団体
  1. ホーム
  2. サポート
  3. 技術情報
  4. Hypertext Strict Transport Security(HSTS)とは

Hypertext Strict Transport Security(HSTS)とは

Hypertext Strict Transport Security(HSTS)は、WebブラウザにTLSの使用を強制するポリシーメカニズムです。
WebブラウザがHSTS指定されているWebサイトにアクセスすると、Webサーバーは次回からhttpsアクセスするようにWebブラウザに通知します。
こうして、HSTSはすべての通信がクライアント側のセキュアなトランスポート層を介して行われることを保証することにより、TLSのより効果的な実装を可能にします。
HSTSは、特に中間者(MiTM)攻撃防止に有効とされています。

HSTSは2012年にRFC 6797で規定されています。

HSTSを設定する

構成要素

Strict-Transport-Security ヘッダーを構成するフラグは「max-age」「includeSubDomains」「preload」です。

  • max-age
    ブラウザがHSTSポリシーをキャッシュして適用する時間を秒単位で指定します。
  • includeSubDomains
    このフラグが指定された場合は、ブラウザが現在のドメイン以下のすべてのサブドメインにもこのポリシーを適用する必要があることを示します。
  • preload
    HSTS Preloadリストに含まれることを希望する場合、このフラグを指定します。
HSTS Preloadリスト

HSTS Preloadリストとは各ブラウザが持つリストです。このリストに登録されたドメインにhttpでアクセスしようとした場合、ブラウザは自動的にhttpsに切り替えてアクセスします。
HSTS Preloadリストはすでに主要ブラウザ(Chrome、Firefox、Safari、Internet Explorer、Microsoft Edge、Opera)で採用されています。
HSTSが指定されていてもHSTS Preloadリストに未登録のサイト場合は、初回のアクセスに限りhttp接続になることがあります。

HSTS Preloadリストへの登録を急ぐ場合は、Strict-Transport-Security preloadを指定した上でHSTS Preload List Submissionで申請することができます。

設定手順

もし設定に間違いがあった場合も「max-age」の間は取り消すことができないので、最初は「max-age」を数分以内にし、設定に間違いがないことが分かってから、HSTS Preload List Submissionが規定している、10886400秒(18週)以上を設定します。
「preload」も設定に間違いがないことが確認できてから指定します。

サーバーでの設定方法

  • IIS サーバーの場合
    IIS サーバーでの設定方法は複数ありますがその一つは「インターネットインフォメーション サービス (IIS) マネージャー」を使う方法です。
    1. 対象サイトの中央ペイン「IIS」ブロックで「HTTP応答ヘッダー」をダブルクリックします。
    2. 対象サイトの右ペイン「操作」ブロックで「追加」をダブルクリックします。
    3. 「カスタムHTTP応答ヘッダーの追加」ウィンドウで名前欄に「Strict-Transport-Security」を、値欄に、たとえば「max-age=300; includeSubDomains; preload;」を入力し「OK」をクリックします。
      カスタムHTTP応答ヘッダーの追加ウィンドウ
    web.config ファイルに、たとえば以下のような記述を追加する方法もあります。
    <customHeaders> <add name="Strict-Transport-Security" value="max-age=300; includeSubDomains; preload;" /> </customHeaders>
    また、以下は、IIS 7.0 以降で http アクセスを https にリダイレクトし、HSTSを有効にする web.config の例です。
    <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="HTTP to HTTPS redirect" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="off" ignoreCase="true" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /> </rule> </rules> <outboundRules> <rule name="Add Strict-Transport-Security when HTTPS" enabled="true"> <match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" /> <conditions> <add input="{HTTPS}" pattern="on" ignoreCase="true" /> </conditions> <action type="Rewrite" value="max-age=31536000; includeSubDomains; preload" /> </rule> </outboundRules> </rewrite> </system.webServer> </configuration>
  • Nginx サーバーの場合
    /etc/nginx/nginx.conf 等の設定ファイルを開き、対象のServer Blockに、たとえば以下を追記して、Nginxの再起動を行います。
    add_header Strict-Transport-Security 'max-age=300; includeSubDomains; preload; always;'
  • Apache サーバーの場合
    /etc/httpd/conf.d/ssl.conf 等の設定ファイルを開き、対象のVirtualHostディレクティブに、たとえば以下を追記して、Apacheの再起動を行います。
    Header set Strict-Transport-Security "max-age=300; includeSubDomains; preload"
SSL サーバ証明書とは?
30日間テスト証明書
30日間返金保証制度あり!
コードサイニング証明書
ドキュメントサイニング証明書
デジタル証明書ニュース
HTTPS入門
digicert.comトピックス&ニュース