コンテンツにスキップ

🔒 HSTS preload 申請可否判定

hstspreload.org の主要な申請要件(HSTS ヘッダ・max-age 1 年以上・includeSubDomains・preload・HTTP→HTTPS リダイレクト・www サブドメインの HTTPS 配信)を自動チェックします。

完全無料 登録不要 サーバー処理 ログ・DB 保存なし レート制限あり 5 言語対応 ダークモード

⚠️ 診断対象のサーバーには DevLab のサーバーからアクセスが行われます。プライベート IP・ローカルホストは対象外です。

📖 この診断で分かること

この診断は HTTPS で接続して Strict-Transport-Security ヘッダーを取得し、max-ageincludeSubDomainspreload が preload リストの要件を満たしているかを判定します。HSTS が守れるのは「2 回目以降のアクセス」だけだという点に注意してください。ブラウザがヘッダーを受け取るまでは何も強制されないため、初回の平文リクエストは依然として傍受され得ます。この穴を埋めるのが preload リストです。

判定項目 何を見ているか 引っかかったときの対処
max-age が短い max-age は「この秒数のあいだ HTTPS を強制せよ」という指示です。preload リストへの申請には最低 31536000(1 年)が必要で、実務上は 63072000(2 年)が推奨されます。短いとその期間を過ぎたユーザーは、また平文でアクセスし得る状態に戻ります。 いきなり 2 年にせず、300 → 86400 → 2592000 → 63072000 と段階的に上げます。途中で HTTPS に問題が見つかったとき、短い値なら影響が早く消えるからです。すべてのサブリソースが HTTPS で配信できていることを確認してから最終値へ。
includeSubDomains を安易に付けている このディレクティブはすべてのサブドメインに、その場で、一律に HTTPS を強制しますlegacy.example.com や社内ツール、メール配信のクリック計測ドメインが HTTP のままだと、それらは即座に到達不能になります。しかもユーザー側のブラウザに記憶されているので、サーバーを戻しても max-age が切れるまで直りません。 付ける前に DNS ゾーンを開いて A / CNAME を全部書き出し、1 件ずつ HTTPS で開けるか確認します。証明書はワイルドカード 1 枚で足りることが多いですが、多段のサブドメイン(a.b.example.com)はワイルドカードの対象外なので個別に必要です。
ヘッダーが返っていないように見える 設定したはずなのに検出されない原因の筆頭は 2 つです。(1) HTTP(平文)の応答に付けている — RFC 6797 により平文応答の HSTS は必ず無視され、HTTP から HTTPS への 301 応答に付けても意味がありません。(2) nginx の add_header の継承が消えている — 下位の location ブロックに 1 つでも add_header があると、上位ブロックの add_header はそこでは全部無効になります。 HTTPS の 200 応答に付けるのが正解です。nginx なら add_header … always;always を付け(エラー応答でも出るようになります)、add_header を書いた location ブロックすべてに同じ行をコピーするか、include で共通ファイルを読み込みます。

HSTS を有効にすると、証明書の期限切れや不一致が発生したときにユーザーが警告を回避してアクセスすることが出来なくなります。これは仕様どおりの動作であり、そのぶん証明書の自動更新が止まっていないかの監視が重要になります。開発機で誤って有効化してしまった場合は、Chrome なら chrome://net-internals/#hsts の Delete domain security policies で個別に解除できます。