わりと当たり前の話なんだけど、当たり前すぎて感覚に近いレベルで認識しているので書き留める
インターネットはバケツリレー
大前提、クライアントとサーバがデータのやりとりをするインターネットの機構は各データがクライアントから各種ルータなどを経由して、サーバまで到達する。このデータがバケツリレーで行われるため、何もしないとデータそのものは中継地点の第三者には見えるようになっている。
https通信では何を行っているか
httpsのsはSecureを表しており、このバケツリレーを安全な通信をできるようのための仕組み。技術的にはSSLが採用されている。
大まかに表現すると実データの通信前に以下の工程が行われる
- クライアント(ブラウザ)とサーバ間で暗号化の情報をやりとりする
- サーバからクライアント証明書(公開鍵A)を受け取る
- クライアントは共通鍵Bを作り、鍵Bを鍵Aで暗号化してサーバへ送る
- サーバは公開鍵Aと対になる秘密鍵Cで暗号を解いて鍵Bを取得する
- 以後の通信は鍵Bで暗号化しお互い暗号化/復号化して通信を行う
このようにクライアント側とサーバ側の2者でしかわかり得ない鍵を使って通信する内容自体を暗号化する。
httpだとどうなり、何が駄目なのか
httpsはクライアント側で暗号化したデータは中継地点のルータなどではデータを復号化できないため、それ自体は意味を知ることができない。だがhttpの場合はデータがそのまま見えるのでそのデータを見ればクライアントとサーバの間でどのようなデータがやりとりしているのかが丸裸になる。
そのため、httpの通信は第三者の中継地点を挟むので、本当に公開されているデータ以外が流通すると、盗み見される危険性があることが最大の問題となる。