lvncerpedia

いいねそのテーマ、ちゃんと理解すると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って何してるの?」とか 「証明書の中身って実際どうなってる?」とかもいけるよ。

こういう話、ちょっと楽しくなってきてない?😏