SSLの基本の報告
図解で学ぶネットワークの基礎: SSL編を読んだ内容を書き留めます。
SSL通信
webブラウザのステータスバーに錠前マークが出ているとSSL通信をしている。
また、アドレスがhttps://...
というURLだった場合にもSSL通信をしている状態。
機能と位置付け
機能は大きくわけて2つ
- データの暗号化
- 通信相手が信頼できることの確認(認証)
データの暗号化と信頼の確認
SSLはインターネット上でやり取りするデータの暗号化を行う。
個人情報やクレジットカードの情報などをインターネットでやり取りする際に、データが見られてしまってもわからなくするように暗号化をして途中で盗み見られる事を防止している。
「サーバー証明書」を利用しての信頼性の確認
データを送るサーバーが信頼できるかどうかをクライアントがサーバーから「サーバー証明書」を受け取り、検証をすることによって信頼できるかどうかの判断ができる。
SSLの通信全体から見た立ち位置
通信の流れは以下のようになる。
- Webブラウザが
https://...
宛のサーバーにデータを送る - WebブラウザはTCPでは無くSSLにデータを渡す
- SSLはブラウザから受け取ったデータを暗号化してTCPへ渡す
- 暗号化データを受け取ったTCPはパケットに
443port宛
と明記する - このデータがIP、イーサネットとわたって回線上に送り出される
※受信時は送信時の流れとは逆になる
SSLの概要
「共通鍵暗号」「公開鍵暗号」
SSLは「共通鍵暗号」と「公開鍵暗号」の2つの暗号方式を使う
「共通鍵暗号」方式
- 暗号化と復号に同じ鍵を使う
- 暗号化と復号の処理が軽い
- 送信側と受信側があらかじめ同じ鍵をもっていなければならない
- 通信相手を特定していないインターネット通信で同じ鍵を事前に持つことが不可能
- 鍵をやりとりする際に盗まれる可能性がある
「公開鍵暗号」方式
- 公開鍵と秘密鍵のペアの鍵を使う
- 片方の鍵で暗号化したデータは、ペアの鍵でしか復号できない
- 片方の鍵をインターネットで公開してももう片方の鍵を秘密にしておけば安全にデータを送れる
「公開鍵暗号」で「共通鍵」を安全におくる
ふたつを組み合わせた通信のやりとりがSSL通信の概要である。
- クライアントがサーバーにSSL通信の要求を送る
- サーバーは自身の公開鍵が入った証明書をクライアントに返信
- クライアントはサーバーの公開鍵を使って共通鍵を暗号化してサーバーに送る
- 共通鍵を使ってクライアントとサーバーは本来の目的であるデータの暗号化/復号を高速・軽量に処理できるようになる
SSLの全貌
2つの仕様で構成
SSLで運ぶメッセージはレコード
と呼ばれている。
レコード・プロトコル
- レコードの構成するそのもの
- レコードはヘッダー部分とデータ部分に分かれている
- データ部分にハンドシェーク・プロトコルが入る
ハンドシェーク・プロトコル
- データ部分に入る
- メッセージや、暗号通信時の暗号化データが入る
- 暗号通信をするにあたっての必要な情報をやりとりする際に使われる
- ここのメッセージは種類が決まっている
ClientHello
ServerHello
一般的なやりとり
以下のやりとりを行い、それ以降はクライアントとサーバーは共通鍵を使って暗号化通信を実施する
- 暗号通信時に使う暗号方式を決める
- クライアントがサーバーに暗号通信で使う暗号通信方式などを提案する
- 暗号方式だけでなく,サーバー認証の方式,鍵交換の方式,ハッシュ関数の種類など
- サーバーは提案のあった方式から適切なものを選択して返答する
- クライアントがサーバーに暗号通信で使う暗号通信方式などを提案する
- Certificateメッセージの利用
- ClientKeyExchangeメッセージの送信
- ハンドシェーク終了
- クライアントはこれまで決めた暗号方式の採用を宣言し、ハンドシェークの終了をサーバーに知らせる
- サーバーの動作もクライアントと同様にハンドシェークの終了をクライアントに知らせる
- ハンドシェーク終了
通信相手のサーバーが信頼できるかの検証
証明書の「署名」
サーバー証明書はサーバーの管理者が「認証局」に申請して発行してもらう。
サーバー証明書の中にある情報