ページ更新日:2026/05/12
HSTS(HTTP Strict Transport Security)をApacheに設定すると、ブラウザがサイトへのアクセスを自動的に HTTPS に切り替えます。
SSL証明書のインストール後に設定することで、HTTP から HTTPS へのリダイレクト漏れを防ぎ、セキュリティを強化できます。
Nginx の場合は NginxのHSTSとTLS設定強化 をご覧ください。
WebサーバーでHSTSを有効にすると、Strict-Transport-Security レスポンスヘッダーがブラウザに送られます。
ブラウザはこのヘッダーを受信したサイトを「HSTS対応サイト」として記録し、以後 max-age で指定した期間はそのサイトに対して自動的に HTTPS でアクセスします。
2回目以降のアクセスは http:// と入力してもブラウザが自動的に https:// に書き換えるため、HTTP 経由の盗聴リスクを防げます。
HSTS設定には Apache の mod_headers モジュールが必要です。有効になっているか確認・有効化します。
# Ubuntu/Debian系 sudo a2enmod headers sudo systemctl restart apache2 # CentOS/AlmaLinux系(mod_headersは標準で有効なことが多い) # httpd.conf で LoadModule headers_module が有効になっているか確認 grep -i "headers_module" /etc/httpd/conf/httpd.conf /etc/httpd/conf.modules.d/*.conf
httpd.conf または VirtualHost 設定ファイルの <VirtualHost *:443> ブロック内に以下を追加します。
Header always set Strict-Transport-Security "max-age=31536000"
※ max-age=31536000 は1年(31,536,000秒)です。最初は短い値(max-age=300 など)でテストすることを推奨します。
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
※ includeSubDomains を付けると、www.example.com だけでなく sub.example.com などのサブドメインにも HSTS が適用されます。すべてのサブドメインが HTTPS に対応していることを確認してから追加してください。
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
※ preload を付けて https://hstspreload.org/ に申請すると、主要ブラウザの HSTS プリロードリストに登録されます。登録後は初回アクセスから HTTPS が強制されます。
HSTS と同時に TLS の古いバージョン(TLS 1.0・1.1)を無効化すると、セキュリティが大幅に向上します。
<VirtualHost *:443>
ServerName www.example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
SSLCertificateChainFile /etc/ssl/certs/intermediate.crt
# TLS 1.2/1.3 のみ有効化
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
# 推奨暗号スイート
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
# HSTS(1年・サブドメイン含む)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>
# HTTP → HTTPS リダイレクト
<VirtualHost *:80>
ServerName www.example.com
Redirect permanent / https://www.example.com/
</VirtualHost>
Apache を再起動後、curl コマンドでヘッダーを確認します。
curl -I https://www.example.com
レスポンスに以下が含まれていれば正しく設定されています:
Strict-Transport-Security: max-age=31536000; includeSubDomains
Qualys SSL Labs でも「HSTS: Yes」として確認できます。HSTS が設定済みで TLS 1.2/1.3 のみ有効な場合、A+ グレードの取得が期待できます。
HSTS を設定する際、以下のセキュリティヘッダーも同時に追加することでセキュリティスコア(Qualys SSL Labs・Mozilla Observatory 等)をさらに向上できます。
<VirtualHost *:443>
...
# HSTS(1年・サブドメイン含む)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
# クリックジャッキング対策(iframe での埋め込みを禁止)
Header always set X-Frame-Options "SAMEORIGIN"
# MIME スニッフィング対策
Header always set X-Content-Type-Options "nosniff"
# リファラー情報の制御(外部サイトへの URL 漏洩を抑制)
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# コンテンツセキュリティポリシー(必要に応じてカスタマイズ)
# Header always set Content-Security-Policy "default-src 'self'"
</VirtualHost>
※ Content-Security-Policy はサイトのリソース(JS・CSS・画像等)の読み込み元を厳密に制御します。設定が複雑なため、まず他の3つのヘッダーを適用し、余裕があれば CSP を追加することを推奨します。
設定後は Mozilla Observatory や Qualys SSL Labs でスコアを確認できます。
.htaccess での使用を許可している場合(AllowOverride All または AllowOverride Headers)は動作します。ただし VirtualHost 設定(httpd.conf/ssl.conf)への記述が推奨です。
関連ページ:
HSTS(HTTP Strict Transport Security)とは?設定方法と注意点
NginxのHSTSとTLS設定強化(A+達成設定例)
TLSバージョンと暗号スイートの設定ガイド
ApacheへのSSL証明書インストール手順