目的
HTTPSとHTTPの違いが、暗号化されるかどうかくらいしか理解していなかったのでHTTPS通信について調べてみた。汗
一部表現が曖昧になっている箇所もあリますがご容赦ください。
間違いを見つけた場合は是非コメントお願いいたします。
対象者
- サーバー、クライアント、プロトコル、リクエスト、レスポンスの意味が理解できること
- 公開鍵暗号方式(公開鍵で暗号化したものは、秘密鍵で復号する。秘密鍵で暗号化したものは、公開鍵で復号する仕組み)を理解していること
- 共通鍵暗号方式を理解していること
HTTPSとは(端的に)
- サーバーとクライアント間の通信を暗号化してやりとりするためのプロトコル
- 通信を暗号化することで、悪質なハッカーに傍受されても暗号文なので解読できない状態にできる
- HTTPS通信をするためには、サーバー証明書(後述)が必要になる 1
HTTPS通信で起きる暗号化の流れを具体的に
- クライアントからサーバーに、HTTPSリクエストが行われる
- サーバーからクライアントに、サーバー証明書(後述)を返却する
- サーバー証明書を受け取ったクライアントは、サーバー証明書が妥当なものであるか検証(詳細は後述) 。検証の結果問題なければ、次に進む
- クライアントが、共通鍵の元となる乱数を生成し、これをサーバー証明書の公開鍵を使って暗号化し、サーバーに送る
- サーバーは、送られてきた暗号化された乱数を秘密鍵を使って復号し、これを元に共通鍵を作成。クライアント側も同じアルゴリズムで共通鍵を作成
- サーバー側、クライアント側でそれぞれ生成された共通鍵を用いて暗号・復号をすることで、暗号化通信(HTTPS通信)をする
サーバー証明書とは
- サーバーがドメインに対して本物であることを証明する証明書
- サーバーが作成するが、自分自身だけで「本物だ!!」と言い張っても信用に値しないので、CA(認証局)からサーバー証明書に署名をもらうことで機能するようになる
- 署名は、CAの秘密鍵を使って暗号化されている
- HTTPS通信には必須
ルート証明書とは
- サーバー証明書を検証するために必要なもので、CAの公開鍵が含まれている
- あらかじめ、クライアント(PCやスマホ)にインストールされている
- こちらもCA(認証局)から配布されている
クライアントで行う「サーバー証明書の検証」とは
クライアントには、事前にCAから配布された「ルート証明書」がインストールされている。
ルート証明書にはCAの公開鍵が含まれている。
そしてサーバー証明書には、CAが本物のサーバーと認めた署名が含まれている。
この署名は、CAの秘密鍵を使って暗号化されている。
サーバーから受け取ったサーバー証明書を、クライアントでCAの公開鍵を使って復号することで署名が改竄されていないか検証することができる。
参考
かなり参考にしました。ありがとうございます。
HTTPS(SSL/TLS)図解で分かる!
-
ちなみにHTTPS通信で使用する暗号化する仕組みをSSL/TSLという ↩