いいねそのテーマ、ちゃんと理解するとTLS周りかなりスッキリするやつ 👍 ゆるっとでも本質はしっかり押さえていこ。
まず結論っぽく言うと
- 普通のHTTPS = 「第三者(CA)が“このサイトは本物だよ”って保証してくれる」
- 自己署名証明書 = 「自分で“俺は本物です”って言ってるだけ」
この「誰が保証してるか」がすべて。
普通のHTTPS(信頼チェーンあり)
例えば https://google.com にアクセスするとこうなる👇
[ブラウザ]
↓(証明書ちょうだい)
[サーバー]
↓
「これが証明書です」
証明書の中身:
- このサイトは google.com です
- 公開鍵はこれです
- 発行者: DigiCert(CA)
↓
[ブラウザ]
「DigiCert?知ってる!信頼できるやつ!」
↓
OSに入ってる「信頼済みCAリスト」と照合
↓
✅ OK(鍵交換してHTTPS通信開始)
ポイント
- ブラウザやOSには最初から「信頼できるCAリスト」が入ってる
- CAが「本人確認」してから証明書を発行する
- だからユーザーは何も考えず安全に使える
自己署名証明書(オレオレ証明書)
同じことを自己署名でやると👇
[ブラウザ]
↓
[サーバー]
「これが証明書です」
証明書の中身:
- このサイトは example.com です
- 公開鍵はこれです
- 発行者: 俺(←同じやつ)
↓
[ブラウザ]
「いや誰だよお前」
結果:
❌「この接続は安全ではありません」
❌「証明書が信頼されていません」
何が問題なの?
自己署名でも暗号化自体はちゃんとされるんだよね。
でも問題はこれ👇
「それ本当にそのサーバー?」
つまり
攻撃者が中間にいた場合(MITM)
[あなた] ←→ [攻撃者] ←→ [本物サーバー]
攻撃者が自己署名証明書を出してきても
👉 見分けがつかない
比喩でいうと
普通のHTTPS
👤「俺はGoogleです」
🏛️「(政府)この人は本物です」
👉 信用できる
自己署名
👤「俺はGoogleです」
👤「あとそれを証明するのも俺です」
👉 いや無理だろw
じゃあ自己署名ってゴミなの?
いや、めっちゃ使う場面ある👇
✔ 開発環境
- localhost HTTPS
- 内部API
✔ 社内ネットワーク
- クローズド環境
- VPN内
✔ 自分で信頼させる場合
自己署名証明書をOSに登録する
→ 「この人は信頼していいよ」って自分で設定
まとめ
| 項目 | 普通のHTTPS | 自己署名 |
|---|---|---|
| 発行者 | CA(第三者) | 自分 |
| 信頼性 | 高い | デフォルトでは低い |
| 警告 | 出ない | 出る |
| 用途 | 公開サービス | 開発・内部 |
ちょい踏み込んだ一言
本質はこれ👇
「公開鍵そのもの」じゃなくて「その鍵が誰のものか」を保証する仕組みが証明書
ここ理解してるとTLS全部見通せるようになるよ。
もし興味あれば 「Let's Encryptって何してるの?」とか 「証明書の中身って実際どうなってる?」とかもいけるよ。
こういう話、ちょっと楽しくなってきてない?😏