SSL/TLS暗号化通信とは

## SSL/TLSとは
この記事ではSSL/TLS暗号化通信とは何か、またその仕組みについてまとめています。

## 目次
- SSL/TLSとは
    - SSL/TLSが活躍している例
    - 暗号化と復号化のイメージ

- 「SSL」と「TLS」の違い

- 暗号化と復号化
    - 共通鍵暗号方式
    - 公開鍵暗号方式
 
- SSLサーバ証明書とは

- SSL/TLSの仕組み（図解）
    - 1　SSL/TLS接続要求
    - 2　公開鍵付きサーバ証明書の送付
    - 3　公開鍵暗号方式でクライアントの秘密鍵をWEBサーバに送付
    - 4　共通鍵暗号方式で暗号化通信を行う
- 最後に

## SSL/TLSとは

SSL/TLSとは、機器（例：WebサーバとWebブラウザ）間の通信において**データの暗号化を行うプロトコル**です。
この仕組みを用いた通信をすることで、インターネットの通信においてデータの改ざんや盗聴などを防ぐことができたり被害を減らすことに繋がります。
また、SSL/TLSはOSI参照モデルの「アプリケーション層」と「トランスポート層」にまたがって使用されます。
そして、「アプリケーション層」のプロトコルと組み合わせて使用されています。
例として、アプリケーション層のプロトコルであるHTTP（ポート番号80）に、組み合わせるとHTTPS（ポート番号443）となります。


### SSL/TLSが活躍している例

例えば、ショッピングサイト（ブラウザ）でクレジットカード情報や住所の情報を入力することがあると思います。
この時にショッピングサイト（ブラウザ）で入力したデータは、インターネットを介してサーバに送られます。
インターネットを介してサーバに送るデータが暗号化されていなかった場合、入力したクレジットカード情報や住所を悪い人に見られ利用される可能性が出てきます。
SSL/TLSの通信を利用することで、上記のようなことを防ぎ、情報を守ることができます。

### 暗号化と復号化のイメージ

暗号化と復号化のイメージがつかない方向けに、4桁のパスワードを例に説明をします。
4桁のパスワード「1998」を暗号化すると、「@s#5」のように解読できないデータに変換されます。
これはあくまで例ですが、暗号化とは、データの内容を解読できなくすることを言います。
逆に、復号化は暗号化されたデータを元に戻すことをいいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1193125/fcbbb625-81f2-3998-cd98-889890e7c841.png)


## 「SSL」と「TLS」の違い

SSL(Secure Sockets Layer)とTLS（Transport Layer Security）はどちらも安全に通信を行う仕組み（プロトコル）で、両者の違いはそれぞれの開発された歴史を調べることでわかります。
ここでは、TLSはSSLの次世代版（改良版）と考えてもらえれば良いです。

また、「SSL/TLS」という表記や、一般的に「SSL」と呼ばれているものは、実際には「TLS」である場合が多いです。
これらはSSLが利用されていた期間が長かったため、その名残で呼び名や表記に残っているようです。

## SSL/TLSの仕組み

SSL/TLS暗号化通信を行うことで、機器間の通信のやりとりでデータを暗号化しますが、データを用いるためにそのデータの暗号化を解くする必要があります。
このデータの暗号化を解くことを復号化と言います。（前述の通り）

SSL/TLSでは、「共通鍵暗号方式」と「公開鍵暗号方式」の2つを用いた**ハイブリット暗号方式**で暗号化を行っています。
暗号化通信の段階として、
**第1段階**では安全性の高い「公開鍵暗号方式」で秘密鍵を共通し、（記事下部の「図解1〜3」）
**第2段階**では処理速度が速い「共通鍵暗号方式」でデータの送受信を行う流れが一般的です。（記事下部の「図解4」）

### 共通鍵暗号方式
共通鍵暗号方式では、「暗号化」と「復号化」で使用する鍵が同じになります。
【メリット】
・処理時間が早い。
【デメリット】
・処理が比較的簡単なため、解読されやすい。
・第三者に鍵が知られてしまうと簡単に解読される危険性がある。
・共通鍵暗号方式を使う相手の数に応じて鍵を作る必要がある為鍵の数が多数必要になる。

### 公開鍵暗号方式
公開鍵暗号方式では、「暗号化」と「復号化」で使用する鍵が別になる。
【メリット】
・公開鍵暗号方式では相手の数に関係なく公開鍵は1つでよいので鍵の管理が容易で安全性が高くなる。
【デメリット】
・処理時間が遅い


## SSLサーバ証明書とは
SSLを利用するには、認証局（CA）という第三者の機関から**SSLサーバ証明書**を発行してもらう必要があります。
サーバ証明書には「サーバ所有者の情報」や「暗号化通信に必要な鍵」「発行者の署名データ」などが含まれます。
Webサイトの所有者は、認証局が管理している「SSLサーバ証明書」を購入し、認証局はサイト所有者の実在性を確認し「SSLサーバ証明書」と「公開鍵」を発行します。
中には、身元の不確かな機関（自分含む）が発行した証明書（オレオレ証明書）を使っているWebサイトも存在します。
認証局に証明してもらったWebサイトは、URLの左側に鍵マークが付与されます。（下記画像赤枠）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1193125/e911f505-35c3-db57-ab17-dc2e0b31831d.png)

## SSL/TLSの仕組み（図解）
SSL/TLSの暗号化通信が確立される流れは下記になります。
### 1　SSL/TLS接続要求
まずクライアント（利用者のコンピュータ等）から対象のサーバへとSSL/TLS通信の接続要求を送信します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1193125/f60935e9-74f9-0313-aade-80c2d38a6941.png)

### 2　公開鍵付きサーバ証明書の送付
WEBサーバは認証局から発行された「サーバ証明書」と「公開鍵」をクライアントに送付します。
クライアント（利用者のコンピュータ等）側では
ブラウザに事前に搭載されているルート証明書（認証局が発行したSSLサーバ証明書であることを確認するための証明書）でSSLサーバ証明書を検証し、秘密鍵を生成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1193125/4772461b-0b4c-f76a-dceb-5df01cd66f79.png)

### 3　公開鍵暗号方式でクライアントの秘密鍵をWEBサーバに送付
クライアント側で生成した「秘密鍵」を、WEBサーバから送られてきた「公開鍵」で暗号化し、WEBサーバに送信します。
WEBサーバに送信されたクライアントの「秘密鍵」は、サーバ側で保持しているWEBサーバの「秘密鍵」で復号化され、クライアントの「秘密鍵」がサーバ側で取り出されます。
この仕組み（公開鍵暗号方式）で、クライアント側で生成した「秘密鍵」がクライアントとWEBサーバの「**共通鍵**」となります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1193125/613b2c1a-f63e-15a9-6e45-666025b9b7cb.png)


### 4　共通鍵暗号方式で暗号化通信を行う
ここまでで、クライアントが生成した「秘密鍵」をWEBサーバに送付し共通鍵となりました。
あとは共通鍵暗号方式で暗号化通信を行いデータの送受信を行います。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1193125/282f73c8-1264-04dc-6318-e7de95d39b12.png)

## 最後に
以上で、SSL/TLS暗号化通信の仕組みの説明は終わりです。

さらに詳細なSSL/TLSの仕組みについては、下記の記事がとても参考になるかと思います。（私の記事ではないですが）

https://qiita.com/Brutus/items/1015cc01d2e1eb82a526