SSL通信とは?通信を暗号化して盗聴や改ざんを防ぐ

SSLは通信を暗号化するための仕組みです。
この記事ではその必要性と仕組みを簡単にまとめます。

なぜ暗号化が必要なのか?

SSLとは通信を暗号化するための仕組みです。
SSLの説明をする前にまずSSLを使っていないケースを考えて見ます。
下図のようにクライアントとサーバがやり取りをすることを考えます。

f:id:halya_11:20190603000705p:plain

暗号化をしていないと通信内容が丸見えなので盗聴されてしまいます。

f:id:halya_11:20190603000952p:plain

また通信内容が改ざんされてしまっていても気づけません。

f:id:halya_11:20190603001147p:plain

ここで通信がしっかり暗号化されていれば、盗聴や改ざんしようとして中身を見てもわからないので問題ありません。

f:id:halya_11:20190603001339p:plain

このようにネットワークのセキュリティを考える上で通信の暗号化は重要で、それを実現するための仕組みがSSLです。

SSLとは通信を暗号化するための仕組み

SSL通信を行うためにはまずサーバからクライアントにサーバの証明書を送ります。
これはこの通信に使うための公開鍵が確かにそのサーバのものである(なりすましをされていない)ことを証明するためのものです。

f:id:halya_11:20190603002118p:plain

次にクライアントが通信に使うための共通鍵を生成します。
これをサーバに安全に渡すため、先ほどの証明書に含まれている公開鍵を使って共通鍵を暗号化します。
サーバはクライアントから送られてきた共通鍵を秘密鍵で復号化することで手に入れます。

f:id:halya_11:20190603002306p:plain

あとはこの共通鍵を使って暗号化・復号化を行いながら通信するだけです。

f:id:halya_11:20190603002449p:plain

SSL通信を使っていれば安全というわけではない

上記のようにSSL通信を行うと通信が暗号化されて安全性が増しますが、これで完全に安全になるわけではありません。
例えば、サーバとクライアントの間にクライアントとサーバの両方の役割をするような仲介者を挟んで通信内容を改ざんするような中間者攻撃が行われる危険性があります。

f:id:halya_11:20190603002657p:plain

これを防ぐためには、そもそも送られてきたサーバ証明書が正しいのかをクライアントサイドで検証するなどの処理が必要になってきます。

認証局の証明書を見てみる

SSL通信の開始時にサーバからクライアントに証明書を送ることはすでに説明しました。
では、この証明書は誰が発行したものなのでしょうか?

これは、認証局と呼ばれる「この機関に証明されていればそのサーバは信頼できる」と認められた機関が発行します。
そしてこの信頼できる認証局自体の証明書(公開鍵)はあらかじめクライアントにインストールされています。

そしてサーバから送られてくる証明書には認証局のデジタル署名が付加されているので、
これをクライアントにインストールされている認証局の証明書の公開鍵で復号化できれば、
そのサーバの証明書が確かに認証局に許可されたものであることが確認できます。

と、こんな感じの仕組みではありますが、認証局についてはちょっとイメージしづらいので、クライアントにインストールされている証明書を見て存在を意識してみます。
Windowsの場合、Windowsアイコンの横の検索窓に「certmgr.msc」と打ち込んでcertmgrを起動します。

f:id:halya_11:20190603003500p:plain

そして「信頼されたルート証明機関」 > 「証明書」とクリックするとインストール済みの証明書が表示されます。

f:id:halya_11:20190603003642p:plain

これでインストールされている証明書が確認できました。

関連

light11.hatenadiary.com

参考

ssl.sakura.ad.jp

https://search.yahoo.co.jp/amp/s/microsoftou.com/role-of-ca/%3Famp%3D1%26usqp%3Dmq331AQNKAGYAenI_7bWmt7HTg%253D%253D