page_adsence

2015年10月12日月曜日

SSL接続の仕組み

iOSアプリ開発していた時に色々と横道に逸れていったらSSL通信の仕組みに関して、ちゃんと理解してない事に気がついたので図を書いてみた。


言葉で流れを説明する前に、SSLは「共通鍵暗号方式」と「公開鍵暗号方式」の両方を使っているということを知っておく必要があります。

共通鍵暗号方式


クライアントとサーバで同じ鍵情報を持っている状態で、それぞれが送信時には暗号化し、受信時には復号化する。
クライアント、サーバ共に暗号化、復号化が可能。

公開鍵暗号方式


サーバ上で生成された秘密鍵と公開鍵のキーペアを使う。
クライアントは公開鍵を取得し、サーバ側に公開鍵を使って暗号化した情報を送る。
サーバ側では受信した情報を秘密鍵を使って復号化する。
共通鍵暗号方式との大きな違いは、公開鍵で暗号化された情報は秘密鍵でしか復号出来ないという点。
クライアントにしろ、サーバにしろ、秘密鍵を持っている方でしか復号できない。

以上の事を踏まえて、SSL通信の流れを説明してみる。

1.ユーザーがSSL化されているページにアクセス(SSL接続要求)
2.サーバ側はその接続要求に対し公開鍵を含んでいる証明書を返却
3.ユーザーは証明書から公開鍵を取り出す
4.SSL接続要求をしたサーバと暗号化通信するための共通鍵を作成
5.作成した共通鍵を公開鍵を使って暗号化して、サーバへ送信
6.サーバは受信した共通鍵を秘密鍵を使って復号化
7.処理の終了通知を送る。
8.ユーザーが入力したユーザー名やパスワードを共通鍵を使って暗号化して送信
9.共通鍵を使って復号化し、入力された情報を取り出す。
10.取り出した情報で各種処理を行う。
11.レスポンスを返却する。

以上がざっくりとした流れです。

ネットでググっていると、この辺の情報はいっぱい出てくるのですが、どれが正しいのか正直わかりません・・・。
この記事も間違っている可能性もあります・・・。
程々に参考にして下さい。