1. HTTP のままだと読まれる
ブラウザとサーバーは、HTTP という決まった書き方でやりとりしています。ところが HTTP は、やりとりを暗号にしません。お問い合わせフォームに入れた名前やメールアドレス、ログインのパスワードも、そのままの形で通り道を流れます。
通り道のどこか(たとえば公衆 Wi-Fi)で覗かれると、中身がそのまま読めてしまいます。途中で書きかえられても、ブラウザは気づけません。
2. HTTPS は HTTP を TLS で包む
HTTPS は、HTTP のやりとりを TLS という暗号の仕組みで包んだものです。中身の書き方は HTTP のままで、外側を暗号の封筒に入れて送るイメージです。
TLS の前の名前は SSL です。今も「SSL 化」「SSL 証明書」と呼ぶことが多いのですが、実際に使われているのは TLS です。古い SSL や TLS 1.0・1.1 には弱いところが見つかって使われなくなり、今は TLS 1.2 と 1.3 が使われています。
3. 鍵の材料を交換する
ブラウザがサーバーにつなぐと、TLS はまず、やりとりを暗号にするための鍵を決めます。
- ブラウザとサーバーが、それぞれ「鍵の材料」を作って交換します
- 交換した材料と自分の手元の秘密から、ブラウザとサーバーが 同じ鍵 をそれぞれ計算します
- 鍵そのものは通り道に流れないので、途中で材料を覗かれても、同じ鍵は作れません
ただし、この時点ではまだ「相手が本物の example.jp か」は分かっていません。それを次の 4 と 5 で確かめます。
4. サーバーが証明書を見せる
サーバーは、3 で作った鍵で暗号にした通り道を使って、自分の 証明書 をブラウザに見せます。証明書には、主に次のことが書いてあります。
- どのドメインの証明書か(例:
example.jp) - いつからいつまで使えるか
- 誰が発行したか(認証局)
- サーバーの公開鍵
あわせてサーバーは、証明書と組になる秘密鍵で、ここまでのやりとりに署名して送ります。証明書を見せるだけでなく、その証明書の持ち主であることも示すためです。
5. ブラウザが証明書を確かめる
ブラウザは、受け取った証明書を 3 つの点で確かめます。
- 名前:証明書のドメインがアドレス欄のドメインと合っているか
- 期限:今日が使える期間の中か
- 発行元:ブラウザやパソコンがあらかじめ信頼している認証局が、発行を保証しているか
3 つとも合い、4 の署名も正しければ次へ進みます。1 つでも合わなければ、ブラウザは「この接続ではプライバシーが保護されません」などの警告の画面を出して止まります。図の下のボタンで、期限が切れているときの様子を見られます。
補足
証明書の期限は、短くなってきています。2026 年 3 月からは最長 200 日になり、2027 年 3 月からは 100 日、2029 年 3 月からは 47 日になる予定です。手で更新するのは現実的でなくなるので、レンタルサーバーの無料の証明書(Let's Encrypt など)のように、自動で更新される仕組みを使うのが前提になります。
6. 暗号でやりとりする
相手を確かめられたら、ここからがいつもの HTTP のやりとりです。ページをリクエストする、フォームを送る、といった中身はすべて、この鍵で暗号にしてから送ります。
途中で覗かれても、見えるのは意味のない文字の並びです。書きかえられた場合も、受け取った側が気づけます。
7. 鍵のマークが表すこと
アドレス欄の鍵のマークは、ここまでの流れがうまくいった印です。表しているのは次の 2 つです。
- 通り道が暗号になっていること
- つないだ相手が、確かにそのドメインのサーバーであること
ブラウザによって、印の形は違います。Chrome は 2023 年から鍵のマークをやめ、代わりにサイトの設定を開く印を出しています。Chrome で HTTPS でないページを開くと、アドレス欄に「保護されていない通信」と出ます。
一方で、鍵のマークは サイトそのものが安全かどうか は表しません。証明書は無料で取れるので、偽のサイト(フィッシングサイト)にも鍵のマークは付きます。鍵のマークだけでなく、ドメインの名前が本物かどうかも確かめることが大切です。
自分のサイトを HTTPS にするには
多くのレンタルサーバーには、無料の証明書を設定して自動で更新する機能があります。設定のあとは、次の点を確かめます。
http://で来た人をhttps://に転送する(301 リダイレクト)- ページの中の画像や CSS を
http://で読み込んでいないか(混在コンテンツ)。残っていると、鍵のマークが外れたり、読み込まれなかったりします - WordPress なら、設定の「WordPress アドレス」と「サイトアドレス」を
https://にする
出典
- RFC 8446: The Transport Layer Security (TLS) Protocol Version 1.3
- RFC 9110: HTTP Semantics
- RFC 5280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile
- RFC 7568: Deprecating Secure Sockets Layer Version 3.0
- RFC 8996: Deprecating TLS 1.0 and TLS 1.1
- Baseline Requirements(CA/Browser Forum)
- HTTPS(MDN 用語集)
- トランスポート層セキュリティ(MDN)
- Let's Encrypt の仕組み(Let's Encrypt)
この図解は、出典に挙げた仕様や公式の文書をもとに Claude(AI)が下書きし、セオリコが内容を確かめて公開しています。図は説明のために流れを簡単にしたもので、実際のやりとりはサイトや環境によって異なります。