しっかり保護された訪問

HTTPSの裏側で何が起きている?TLS証明書とブラウザを守るしくみ

HTTPSでの訪問は、暗号化された通信、身元を確認できるサーバー、ブラウザに伝える明確なルールの組み合わせで成り立っています。各層の役割と、日々のサイト運用への取り入れ方を学びましょう。

それぞれ鍵を収めた二つのアイボリーの塔が、盾の形をした保護層に包まれた光るガラス管でつながっている概念図。
概念を表すイラスト

レストランのWebサイトで席を予約する場面を想像してください。ページを開き、時間を選び、ログインして、ページに埋め込まれた決済サービスで予約を確定します。この架空の例では複数のシステムが連携していますが、利用者にとっては一つのシンプルな体験です。

TLSとセキュリティヘッダーは、こうしたシステムが安全に連携するための仕組みです。TLSは通信を暗号化し、ブラウザがサーバーの身元を確認できるようにします。レスポンスヘッダーは、コンテンツやCookie、次回以降の訪問をどう扱うかをブラウザに指示します。

このガイドの対象範囲

この記事はTLSとセキュリティヘッダーの仕組みを説明します。無料の公開準備スナップショットは8項目のパッシブなチェックで、ペネトレーションテストではありません。TLSについては1回の接続でネゴシエートされたプロトコルを記録するだけで、サーバーが対応するバージョンや暗号スイートの一覧は取得しません。ヘッダーはトップページの最終レスポンスで主に有無を確認し、CookieのSameSiteは見ません。HTTPからHTTPSへのリダイレクトは、http://のアドレスを入力したときだけテストします。

1. 訪問における証明書の役割を理解する

ブラウザがHTTPSで接続すると、TLSによって暗号化された通信路が確立されます。ブラウザは、証明書がアクセス先のホスト名を対象にしているか、信頼する認証局(CA)までの証明書チェーンを構築できるかを確認します。証明書には、対象となる名前、有効期間、信頼チェーンの構築に必要な情報が含まれています。

ルートドメイン、「www」、各サービスのサブドメインなど、公開しているホスト名を一覧にします。名前ごとに証明書を確認し、どの事業者が管理しているかを記録しましょう。CDNとオリジンサーバーで、証明書や更新の仕組みが別々になっていることもあります。証明書の有効期間も短くなっています。2026年3月15日以降に発行される公開TLS証明書の有効期間は最長200日で、2027年3月15日からは100日、2029年3月15日からは47日に短縮されます。更新を自動化し、有効期限は別途監視してください。たとえばLet’s Encryptは、2025年6月4日で有効期限の通知メールを終了しています。

OWASPのTLSチートシートは、サポートするプロトコルの選定や設定の維持に役立ちます。実際の接続でネゴシエートされたTLSバージョンを記録しておくと、確認作業の具体的な根拠になります。

2. 各層がどう補い合うかを知る

層得られるもの実践のポイント
TLS証明書認証され、暗号化された接続ホスト名、有効期間、更新担当者を把握する
コンテンツセキュリティポリシー(CSP)ページのリソースと動作に関する明確なルールサイトが実際に使うリソースに合わせて作る
HSTS次回以降の訪問でも一貫してHTTPSを使用有効期間と対象ドメインの範囲を意図して選ぶ
Cookie属性アカウント操作の流れに合ったセッションログイン、埋め込みサービス、外部サイトからの戻りを試す

これらは互いを補う指示と考えるとよいでしょう。証明書は接続そのものを支え、ヘッダーは個々のレスポンスをどう扱うかを伝えます。ページごとに目的も異なります。公開記事、アカウントページ、意図して埋め込みを許可するウィジェットには、それぞれの役割に合ったポリシーが適しています。

3. 実際に使うリソースからCSPを組み立てる

コンテンツセキュリティポリシー(CSP)は、ページが読み込めるリソースの取得元と、ブラウザに許可する動作を定めます。まずスクリプト、画像、フォント、通信先、フレーム(iframe)を棚卸ししましょう。操作の流れを最後までたどり、ユーザーの操作後に初めて読み込まれる決済、認証、サポート関連のリソースも一覧に含めます。

作成したポリシー案が実際の利用と合っているかは、Report-Onlyモードで確認できます。このモードは何もブロックせず、違反を報告するだけです。Content-Security-Policy-Report-OnlyはHTTPレスポンスヘッダーとして送る必要があり、HTMLのmeta要素では使えません。ブラウザのコンソールや設定した報告先に届いたメッセージをそれぞれのリソースと照らし合わせ、必要なルールを決めます。代表的な操作の流れを確認し終えてから、テスト済みのポリシーを適用します。nonceやハッシュを使えば、特定のスクリプトだけを個別に許可できます。リソースの一覧を文書にしておくと今後の追加を判断しやすくなり、各許可の理由も説明できます。

4. HTTPSをブラウザの習慣にする

HSTSは、指定した期間、そのホストにはHTTPSだけで接続するようブラウザに指示する仕組みです。ブラウザは有効なHTTPSレスポンスからこのポリシーを受け取り、次回以降の訪問に適用します。HTTPで届いたHSTSヘッダーは無視されます。HSTSが有効なホストでは、証明書エラーが起きてもブラウザは「このまま進む」選択肢を表示しません。そのため証明書の有効期限が切れると、以前に訪問したことのある利用者はサイトをまったく開けなくなります。証明書の更新とHSTSは一緒に計画しましょう。まずはチームが様子を確認しやすい短い期間から始め、動作を確かめながら段階的に延ばします。

includeSubDomainsを付けると、ポリシーがすべてのサブドメインに及びます。ドメインの一覧と各サブドメインのHTTPS対応状況を確認したうえで判断してください。プリロード(preload)は、ドメインをブラウザに組み込まれたリストに登録し、初回訪問も保護する仕組みです。ただし、プリロードの申請先であるhstspreload.orgは現在、HSTSは推奨する一方でプリロードは推奨しないとしています。ChromeやSafariなどのブラウザが、HTTPでのページ遷移をすでに自動的にHTTPSへ切り替えているためです。リストからの削除が利用者に反映されるまでには数か月かかります。それでも検討する場合は長期的な判断として扱い、対象となるドメイン全体を事前に計画してください。各オプションの関係はMDNのHSTS解説で確認できます。

5. Cookieとヘッダーを利用の流れに合わせる

セッションCookieは、サービスが継続中の訪問を識別するために使われます。Secureを付けたCookieは、HTTPSのリクエストでのみ送信されます(localhostを除く)。ただし、JavaScriptから隠されるわけではありません。HttpOnlyはページ上のJavaScript(document.cookieなど)からCookieを読み取れないようにしますが、ブラウザは条件に合うリクエストに引き続きCookieを付与します。そのため、XSSによるCookieの盗用は抑えられても、XSSそのものを防ぐわけではありません。SameSiteは、クロスサイトのリクエストにCookieを付与するかどうかを制御します。ブラウザによって既定値が異なるため明示的に指定し、ログインや外部サイトからの戻りの流れに合わせて値を選びます。SameSite=Noneを使う場合はSecureも必須です。

ほかのヘッダーは、コンテンツの扱い方をさらに細かく定めます。X-Content-Type-Options: nosniffを送ると、ブラウザはMIMEタイプが正しくないスクリプトやスタイルシートをブロックし、それ以外のレスポンスでも内容から種類を推測しなくなります。そのため、すべてのリソースでContent-Typeを正しく設定しておく必要があります。Referrer-Policyは、リクエストのRefererヘッダーにURLをどこまで含めるかを決めます。ページをどのサイトに埋め込めるかは、CSPのframe-ancestorsディレクティブで指定します。X-Frame-Options: DENYまたはSAMEORIGINは、古いブラウザ向けの代替手段です。どちらもHTTPヘッダーとして送った場合にのみ有効で、meta要素では機能しません。また、frame-ancestorsはdefault-srcの値を引き継ぎません。設定を選ぶ際はOWASPのHTTPヘッダーのチートシートが参考になります。ヘッダーごとに目的を記録し、アプリケーション、リバースプロキシ、CDNの設定が一貫したポリシーになるようにしましょう。

6. 利用者が実際に受け取る状態を確認する

ブラウザの開発者ツールで通常のページリクエストを開き、リダイレクトを最終レスポンスまでたどります。実際に届いた証明書、ヘッダー、Cookieを確認すると、設定と利用者の体験が結び付き、各設定をどのサービスが付けているのかも分かります。ヘッダーを一つずつ開発者ツールやcurlで確認する手順と安全な初期値は、セキュリティヘッダーのチェック方法にまとめています。

  1. サポートしている公開ホスト名にHTTPSでアクセスする。
  2. 証明書の情報と最終レスポンスのポリシーを記録する。
  3. ログイン、アカウント復旧、埋め込み決済、外部サイトからの戻りを最後まで試す。
  4. コンソールの表示と、設定した報告先に届いたメッセージを確認する。

日付入りの設定記録を残し、各層の担当者を明記しておきます。ホスティングや連携サービスが変わったときは、同じ手順で意図した動作を確認します。計画的に展開し、元の設定にすぐ戻せるようにしておくと、更新を落ち着いて進められます。できあがったチェックリストは、将来サイトを引き継ぐ担当者にとっても実用的な手引きになります。

1つのサイトのヘッダーを今すぐ確認したいときは、無料のセキュリティヘッダーチェッカーを使ってください。

7. 保護の地図をサイトのそばに置く

公開ホスト名、証明書の担当者、ブラウザが読み込むリソース、重要な操作の流れを一か所にまとめて記録しておきましょう。

Sitelemetryの無料の公開準備スナップショットは、登録なしで8項目のパッシブなチェックを実行します。この記事のテーマに関しては、サイトに1回だけTLS接続し、証明書が信頼できるか、30日以内に期限切れになるか、TLS 1.2または1.3が使われているかを確認します。また、リダイレクト後の最終レスポンスでどのセキュリティヘッダーが送られているかを調べますが、多くのヘッダーは有無を確認するだけです。結果は、スコア、ヘッダーとTLSの結果をまとめた別の堅牢化グレード、最初に確認すべき最大3件のシグナルとして表示されます。サーバーが対応するすべてのTLSバージョンや暗号スイートを列挙するものではなく、ペネトレーションテストでもありません。

Webセキュリティ監査のガイドでは、これらの層とアカウント、権限、日々の保守との関係を解説しています。

よくある質問

TLSとセキュリティヘッダーはどう連携しますか?

TLSは通信を暗号化し、サーバーの身元を確認します。ヘッダーは、受け取ったコンテンツ、セッション、次回以降のリクエストをブラウザがどう扱うかを指示します。

CSPはどこから始めればよいですか?

代表的な操作の流れで使われるリソースを一覧にし、Report-Onlyヘッダーでポリシー案を試します。届いたメッセージを確認し、意図した動作に合うルールだけを適用します。

HttpOnlyを付ければXSS対策は十分ですか?

十分ではありません。HttpOnlyはページのスクリプトからCookieを読み取れなくするため、Cookieを盗み出して別の場所で使う攻撃は難しくなります。しかしXSSの脆弱性があれば、利用者のブラウザ上でCookie付きのリクエストを送られる可能性は残るため、脆弱性そのものを修正する必要があります。

HSTSのプリロードは使うべきですか?

プリロードの申請先であるhstspreload.orgは現在、HSTSは推奨する一方でプリロードは推奨していません。ChromeやSafariなどが、HTTPでのページ遷移をすでに自動でHTTPSに切り替えているためです。リストからの削除が利用者に届くまで数か月かかるので、検討する場合はすべてのサブドメインを長期的にHTTPSで運用できることを先に確認してください。

証明書の管理台帳には何を記録しますか?

公開ホスト名、証明書の発行・管理元、有効期間、更新担当者、関係するCDNやオリジンの構成です。有効期間が短くなっているため、更新が自動化されているか、有効期限を誰が監視しているかも記録し、ホスティングやドメインの変更時に見直します。

出典・参考資料

  1. MDN:Content-Security-Policy-Report-Onlydeveloper.mozilla.org
  2. MDN:HTTP Strict Transport Securitydeveloper.mozilla.org
  3. MDN:Set-Cookiedeveloper.mozilla.org
  4. MDN:X-Content-Type-Optionsdeveloper.mozilla.org
  5. MDN:CSP frame-ancestorsdeveloper.mozilla.org
  6. MDN:X-Frame-Optionsdeveloper.mozilla.org
  7. OWASP:HTTPヘッダーのチートシートcheatsheetseries.owasp.org
  8. OWASP:TLSのチートシートcheatsheetseries.owasp.org
  9. OWASP:セッション管理のチートシートcheatsheetseries.owasp.org
  10. HSTS Preload List Submissionhstspreload.org
  11. CA/Browser Forum Baseline Requirements(6.3.2)raw.githubusercontent.com
  12. Let’s Encrypt:有効期限通知サービスの終了letsencrypt.org
Sitelemetryチーム

Sitelemetry編集チームが作成しています。詳しく学ぶには、掲載した参考資料をご覧ください。

SITELEMETRY

学んだことを実践へ。

Sitelemetryでサイトの構造、設定、技術的な手掛かりを探りましょう。