LoginSignup
3
2

More than 3 years have passed since last update.

SSLによる暗号化通信(HTTPS通信)とその仕組み

Posted at

はじめに

自社のホームページ立ち上げに当たって、HTTPとかHTTPS周りを復習したので簡単にまとめました

対象読者は、「HTTPSは安全でHTTPは危ないって聞いたことあるけど、仕組みとかはよくわからないな」くらいの人だと思ってください

HTTPとHTTPSの違いについて

HTTP.png
HTTPS.png

HTTP(Hyper Text Transfer Protocol)はウェブサイトなどを見るときに、自分のPCと、そのウェブサイトの情報を教えてくれてるPCとを通信するためのお約束ごととか通信方法のこと

でもHTTPだとその通信が暗号化されていないので、通信データの盗聴とか改竄の被害を受けやすい

通信を暗号化して、外部の人は見えないようにしながら、自分のPCと通信相手のPCだけが見れるようになったら嬉しいよねってことでできたのがHTTPS(Hyper Text Transfer Protocol Secure)

HTTPSの暗号化方式

HTTPSの暗号化にはSSL(Secure Sockets Layer)による暗号化を用いていて、共通鍵暗号方式公開鍵暗号方式を使っている

共通鍵暗号方式

共通鍵暗号方式.png
共通鍵暗号方式は共通鍵と言う名の通り暗号化と復号に同じ暗号鍵を使う
自分と相手だけが使う共通鍵を作って、お互いに暗号化と復号をしながら通信をしている

メリットは
- 暗号化と復号の処理が早いこと

デメリットは
- 共通鍵を渡す時に盗み取られてしまうと、誰でも復号できるようになってしまうこと

公開鍵暗号方式

公開鍵暗号方式.png
公開鍵暗号方式は、ちょっと難しいですよ!

まずは、受信する側秘密鍵公開鍵を作り、受信する側秘密鍵を持っておき、送信してくれる相手公開鍵をあげる
ここで面白いのが!!秘密鍵で暗号化したものは公開鍵でしか復号できなくて、公開鍵で暗号化したものは秘密鍵でしか復号できない!!
(暗号方法には色々あって、その一つにRSAと言う暗号方式があって、その数学的根拠がすごく面白いから興味のある方は是非調べてみてください!!)

共通鍵暗号方式で問題だった「鍵を渡す時にバレちゃう問題」がこっちで発生したとする
つまり、公開鍵を送信者に渡す時に第三者に公開鍵がバレたとしよう
送信者が公開鍵を使って暗号化して送信し、第三者がそれを復号しようとしても、第三者が持ってる公開鍵だと復号できない!!
受信者は秘密鍵を持ってるから復号できる!!
これをお互いの公開鍵と秘密鍵を使って通信をすれば安全に通信できる!!

最強だねって思うけど、デメリットがあって
- 暗号化・復号の処理に時間がかかってしまうこと

だから、共通鍵と公開鍵のどっちのメリットも活かして通信しようってことで生み出されたのがSSL通信

SSLによる暗号方式

SSL暗号方式.png

①公開鍵を渡す

ウェブサイトなどを見ようとアクセスすると、ウェブサイトの情報を教えてくれるPCが正しいPCですよって言う証明書を送ってきてくれる
この証明書にはそのPCの公開鍵も含まれている

②共通鍵の作成

送られてきた証明書が正しいかをブラウザが調べてくれて、正しかったら共通鍵を作る

③共通鍵を渡す

作った共通鍵を相手に渡したいんだけど、途中で第三者に見られたり変更されたら困るので、もらった公開鍵を使って共通鍵の情報を暗号化して相手に渡す

④交通鍵を受け取る

公開鍵で暗号化された共通鍵の情報を、秘密鍵を使って復号する
これでお互い共通鍵を安全に共有することができた

⑤共通鍵暗号方式

お互いに安全に共通鍵を共有することができたので、それ以降は暗号化と復号の処理が早い共通鍵暗号方式で通信を行う

こうすることで、安全に暗号化通信を行うことができる仕組みとなっている
面白い!!

最後に

じゃあ実際はHTTPSだと100%安全かと言うとそうじゃない場合もあるから、気をつけましょう
(詳しくはHTTPS 危険性などでググってみてください)

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2