私のWebアプリケーションは、私が制御する異なる数のホストで実行されます。各vhostのApache構成を変更する必要を防ぐために、リポジトリの.htaccessファイルを使用してほとんどの構成を追加し、各ホストの基本的なセットアップが数行になるようにします。これにより、新しいバージョンを展開するときに構成を変更することもできます。現在、.htaccessはヘッダーを設定(未設定)し、いくつかのリライトマジックを実行し、UAのキャッシュを制御します。
.htaccessを使用して、アプリケーションでHSTSを有効にします。ヘッダーを設定するだけです:
Header always set Strict-Transport-Security "max-age=31536000"
しかし、仕様には明確に「HSTSホストは、非セキュアなトランスポートを介して伝達されるHTTP応答にSTSヘッダーフィールドを含めてはなりません」と述べています。したがって、HTTP接続で送信するときにヘッダーを送信したくありません。 http://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14 を参照してください。
環境変数を使用してヘッダーを設定しようとしましたが、そこで行き詰まりました。その方法を知っている人はいますか?
簡単に使用できるHTTPS環境変数が利用できるようです。同じ質問を持つ人々のために:
Header set Strict-Transport-Security "max-age=31536000" env=HTTPS
Nielsrの答えを基に、.htaccessで次のコードを使用して、 https://hstspreload.org での安全な展開の推奨事項を満たしました。これにより、ドメインがChromeブラウザーにハードコーディングされます。これにより、サブドメイン全体にHSTSが適用され、プリロードリストに含めることは簡単に元に戻せないので、rtfmに注意してください。
<IfModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS
</IfModule>
httpd.conf
(これを編集するアクセス権がある場合)を使用できます
<VirtualHost 65.81.122.43:443>
Header always set Strict-Transport-Security "max-age=31536000; includeSubdomains;"
</VirtualHost>
注:HTTPS vhostのみに設定する必要があり、http vhostには設定できません。
.htaccessファイルを使用するタイミングと使用しないタイミング
.htaccessファイルを許可すると、サーバーにアクセスするたびにApacheがそれらを検索します。親ディレクトリも検索されるため、これにはある程度の(わずかな)時間を要し、サーバーのパフォーマンスに影響を与える可能性があります。 ソース
https://hstspreload.org に準拠するために、これを使用してhtaccessファイルに配置できます。これを.htaccessファイルに入れます。
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_Host}/$1 [R=301,L]
RewriteCond %{HTTP_Host} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_Host}/$1 [R=301,L,E=HTTPS:1]
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS
まず、非httpsからhttpsへのリダイレクトを行います。 HSTSヘッダーを使用して、非www httpsをwww httpsにリダイレクトします。
( http://example.com -> https://example.com -> https://www.example.com - HSTSヘッダー付き)
https://hstspreload.org のテストおよび準拠
さらに別の方法は、非SSL接続の場合は常にヘッダーを設定し、条件付きでヘッダーを削除することです。
Header always set Strict-Transport-Security "max-age=31536000" early
Header unset Strict-Transport-Security env=!HTTPS
これには、Header
ディレクティブとenv
フラグの両方でearly
ディレクティブを使用できるという利点があります。単一のHeader
ディレクティブでは、env
とearly
を一緒に使用することはできません。これらは相互に排他的です(公式ドキュメントを参照してください: https://httpd.Apache.org/docs /current/mod/mod_headers.html#header )。