最終更新
リンドくん
たなべ先生、Webサイトを作る時に「HTTPS化すれば安全」って聞いたんですけど、それだけで本当に十分なんですか?
たなべ
いい質問だね!実はHTTPS化しただけでは不十分なケースがあるんだ。
例えば、最初のアクセス時にHTTPで接続されてしまうと、そこに攻撃の隙が生まれてしまうんだよ。
リンドくん
え?でもHTTPSに自動的にリダイレクトすれば大丈夫なんじゃないですか?
たなべ
残念ながら、そのリダイレクト自体が攻撃者に書き換えられる可能性があるんだ。
そこで登場するのがHSTSプリロードという仕組みなんだよ。今日はこれについて詳しく解説していくね。
Webセキュリティを学び始めた方にとって、「HTTPS化すれば安全」という認識は決して間違いではありません。
しかし、実際にはHTTPS化だけでは防げない攻撃が存在します。
その代表的なものが中間者攻撃(MITM: Man-In-The-Middle Attack)です。
この攻撃では、ユーザーとWebサイトの間に攻撃者が割り込み、通信内容を盗聴したり改ざんしたりすることが可能になります。
本記事では、こうした攻撃からWebサイトを守るための強力な防御手段であるHSTSプリロードについて、セキュリティ初心者の方でも理解できるよう、基礎から丁寧に解説していきます。
HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。
✓ 質問し放題
✓ β版公開中(2025年内の特別割引)
リンドくん
先生、HTTPSって暗号化されてるんですよね?それなのになぜ攻撃されるんですか?
たなべ
確かにHTTPS通信自体は暗号化されているんだけど、問題は最初の接続時なんだ。
ユーザーがブラウザに「____.com」と入力した場合、最初はHTTPで接続を試みることが多いんだよ。
多くのWebサイトでは、HTTPでアクセスされた場合にHTTPSへ自動的にリダイレクトする設定をしています。例えば、以下のような流れです。
http://____.comにアクセスhttps://____.comに再アクセス一見問題なさそうですが、ここに重大な脆弱性があります。
最初のHTTP通信は暗号化されていないため、ネットワーク上の攻撃者がこの通信を傍受し、リダイレクト先を悪意のあるサイトに書き換えることが可能なのです。これは「SSLストリッピング攻撃」と呼ばれる攻撃手法です。
具体的な攻撃の流れを見てみましょう。
http://bank.____.comにアクセスhttp://fake-bank.____.comに書き換えこのように、HTTPS化していても、最初のHTTP接続が攻撃の入り口になってしまうのです。公衆Wi-Fiなどの信頼できないネットワークでは、こうした攻撃のリスクが特に高くなります。
そもそもなぜブラウザは最初にHTTPで接続しようとするのでしょうか?
それは、ユーザーの利便性のためです。ユーザーがアドレスバーに「____.com」とだけ入力した場合、ブラウザは以下の順序で接続を試みます。
http://____.com)にアクセスこの仕組み自体は合理的ですが、セキュリティ上の隙を生んでしまっているのです。
リンドくん
じゃあ、どうやってその問題を解決するんですか?
たなべ
そこで登場するのがHSTS(HTTP Strict Transport Security)という仕組みなんだ。
これを使うと、ブラウザに「このサイトには必ずHTTPSでアクセスしてね」と記憶させることができるんだよ。
HSTS(HTTP Strict Transport Security)は、Webサイトがブラウザに対して「このサイトには常にHTTPSでアクセスすること」を指示するセキュリティ機能です。
具体的には、Webサーバーが以下のようなHTTPヘッダを返すことで実現されます。
このヘッダの意味を分解してみましょう。
https://____.comにアクセスhttp://____.comと入力(HTTPで)https://____.comに変換この仕組みにより、HTTPでの接続を完全に排除できます。リダイレクトではなく、ブラウザ側で自動的にHTTPSに書き換えるため、攻撃者が介入する余地がないのです。
ただし、HSTSには重要な制限があります。
それは、初回アクセス時には保護されないという点です。
ブラウザがHSTSポリシーを記憶するには、一度はHTTPSで接続してHSTSヘッダを受け取る必要があります。つまり、全く初めてそのサイトにアクセスするユーザーは、依然として攻撃のリスクにさらされる可能性があるのです。
この「初回アクセス問題」を解決するのが、次に説明するHSTSプリロードなのです。
リンドくん
初回アクセスが守られないなら、結局危ないんじゃないですか?
たなべ
そこで考え出されたのがHSTSプリロードという仕組みなんだ。
主要なブラウザに「このサイトは常にHTTPSで接続すべき」という情報をあらかじめ組み込んでおくんだよ。
HSTSプリロードは、WebサイトのドメインをGoogleが管理するHSTSプリロードリストに登録することで実現されます。
このリストに登録されると、以下のような流れで保護が機能します。
http://____.comと入力https://____.comに変換このように、ブラウザ側に情報が組み込まれているため、全く初めてのアクセスでも保護されるのです。
実際のプリロードリストには、数十万のドメインが登録されています。Google.com、Facebook.com、Twitter.comなど、主要なWebサービスのほとんどがこのリストに含まれています。
リストは定期的に更新され、新しいドメインが追加されたり、削除申請があったドメインが除外されたりします。
利点
注意点
特に最後の点は重要です。プリロード登録は不可逆的な決断だと考えてください。登録後にHTTPサービスを提供したくなっても、ブラウザに情報が残り続けるため、実質的に不可能になります。
リンドくん
実際にHSTSプリロードを設定するにはどうすればいいんですか?
たなべ
いくつかのステップがあるんだけど、順を追ってやれば難しくないよ。
ただし、事前準備がとても重要なんだ。焦らず一つずつ確認していこう。
HSTSプリロードを登録する前に、以下の条件を満たしている必要があります。
www.____.com、blog.____.comなどこの条件を満たしていない場合、プリロード登録はできません。特に「すべてのサブドメイン」という要件に注意してください。
次に、適切なHSTSヘッダを設定します。プリロードリストに登録するには、以下の条件を満たすヘッダが必要です。
各要素の意味は以下の通りです。
主要なWebサーバーでの設定方法を紹介します。
Apache(.htaccessまたはApache設定ファイル)Nginx
設定後は、ブラウザの開発者ツールでレスポンスヘッダを確認し、正しく送信されていることを確認してください。
準備が整ったら、実際に登録申請を行います。
____.comのように、ルートドメインを入力www.____.comではなく____.comと入力登録申請後、実際にブラウザに反映されるまでには時間がかかります。
反映状況は、以下の方法で確認できます。
chrome://net-internals/#hsts)で確認焦らず、気長に待つことが重要です。この間もHSTSヘッダ自体は機能しているため、既にアクセスしたユーザーは保護されています。
リンドくん
もし設定を間違えたらどうなるんですか?取り消せるんですか?
たなべ
それが一番大変なところなんだ。
削除申請はできるけど、実際にブラウザから削除されるまで半年以上かかることもあるんだよ。だから慎重に進める必要があるんだ。
1. サブドメインの確認漏れ
最も多い失敗は、すべてのサブドメインでHTTPSが利用可能か確認していないケースです。
old.____.comなどの古いサブドメインがHTTPのまま2. max-ageの値が不足
プリロード登録には最低1年間(31536000秒)のmax-ageが必要です。
max-age=86400(1日)など短い値を設定3. HTTPSへのリダイレクト漏れ
一部のページでHTTPアクセスを許可している場合があります。
何らかの理由でプリロードリストから削除したい場合の手順です。
リンドくん
HSTSプリロードって、設定は大変そうだけど、やる価値は十分ありますね!
たなべ
その通り!最初は慎重に準備する必要があるけど、一度設定すれば継続的にユーザーを守ってくれるんだ。
セキュリティへの投資として、とても意味があるよ。
この記事では、HSTSプリロードの仕組みから実装方法、運用上の注意点まで詳しく解説してきました。重要なポイントをまとめておきましょう。
HSTSプリロードの核心的な価値
実装における重要な注意点
Webセキュリティは、一度設定すれば終わりではなく、継続的な改善が必要な分野です。
HSTSプリロードは、その中でも最も基本的で効果的な対策の一つと言えます。
あなたのWebサイトがまだHSTS対応していない場合は、ぜひこの機会に導入を検討してみてください。
ユーザーの安全を守ることは、Webサイト運営者の重要な責任です。