メニューSSL証明書 - メニュー
【SSL証明書】FAQ/情報

ApacheでHSTS(HTTP Strict Transport Security:常時SSL)設定

ページ更新日:2026/05/02

HSTS(HTTP Strict Transport Security)をApacheに設定すると、ブラウザがサイトへのアクセスを自動的に HTTPS に切り替えます。
SSL証明書のインストール後に設定することで、HTTP から HTTPS へのリダイレクト漏れを防ぎ、セキュリティを強化できます。
Nginx の場合は NginxのHSTSとTLS設定強化 をご覧ください。

HSTSとは

WebサーバーでHSTSを有効にすると、Strict-Transport-Security レスポンスヘッダーがブラウザに送られます。
ブラウザはこのヘッダーを受信したサイトを「HSTS対応サイト」として記録し、以後 max-age で指定した期間はそのサイトに対して自動的に HTTPS でアクセスします。
2回目以降のアクセスは http:// と入力してもブラウザが自動的に https:// に書き換えるため、HTTP 経由の盗聴リスクを防げます。

mod_headersの有効化確認

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

HSTS設定例

httpd.conf または VirtualHost 設定ファイルの <VirtualHost *:443> ブロック内に以下を追加します。

基本設定(1年)

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 に対応していることを確認してから追加してください。

HSTSプリロードリストへの申請を行う場合

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

preload を付けて https://hstspreload.org/ に申請すると、主要ブラウザの HSTS プリロードリストに登録されます。登録後は初回アクセスから HTTPS が強制されます。

TLSバージョン設定との組み合わせ(推奨)

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+ グレードの取得が期待できます。

よくある質問

Q. HSTSを設定すると HTTP でのアクセスが完全にできなくなりますか?
max-age で指定した期間(例:1年間)は、ブラウザがそのサイトへの HTTPS を強制します。期間が過ぎれば元に戻ります。ただし一度設定すると期間中は容易に解除できないため、HTTPS 環境が安定した後に設定してください。
Q. .htaccess に書いても動作しますか?
mod_headers が .htaccess での使用を許可している場合(AllowOverride All または AllowOverride Headers)は動作します。ただし VirtualHost 設定(httpd.conf/ssl.conf)への記述が推奨です。
Q. HSTSとリダイレクト(301)の違いは何ですか?
301リダイレクトはサーバーが毎回 HTTP リクエストを受けて HTTPS へ転送します。HSTSはブラウザが最初の HTTPS アクセス後にルールを記憶し、その後の HTTP アクセスをリクエスト送信前に HTTPS に書き換えます。HSTSは301リダイレクトよりも安全で高速です。

関連ページ:
HSTS(HTTP Strict Transport Security)とは?設定方法と注意点
NginxのHSTSとTLS設定強化(A+達成設定例)
TLSバージョンと暗号スイートの設定ガイド
ApacheへのSSL証明書インストール手順

↑ 上へ 注文 検索