TOPサーバ構築・運用> SSLで暗号化通信をする際の動作内容
いまさら聞けないApache〜Webサーバ構築のキソ
いまさら聞けないApache〜Webサーバ構築のキソ

第6回:SSLの基本を押さえる

著者:ビーブレイクシステムズ  木下 喜雄   2007/11/14
前のページ  1  2  3
SSLで暗号化通信をする際の動作内容

   これまで説明したメカニズムによってSSLはインターネット上で安全にデータを送受信できる仕組みを提供しています。それでは、クライアントがSSLのURLにアクセス後、クライアントとWebサーバでどのようなやり取りがされているのか簡単に見ていきましょう。
SSL通信の流れ
図3:SSL通信の流れ
(画像をクリックすると別ウィンドウに拡大図を表示します)


STEP1:使用するアルゴリズムを決める

   SSLの仕様では、利用できる暗号化アルゴリズムやハッシュ関数アルゴリズムが複数あります。そのため、どのアルゴリズムを使用するかを最初に取り決めます。


STEP1-1:Hello Request

   最初にサーバがクライアントに送付するメッセージで、クライアントに「Client Hello」の送信を要求します。


STEP1-2:Client Hello

   Hello Requestを受け取ったクライアントは、Client Helloメッセージを送信します。Client Helloメッセージで送信する代表的な内容は「利用可能なSSLのバージョン番号」「現在時刻」「利用可能な暗号化アルゴリズムとハッシュ関数の組み合わせリスト」「セッションID(新規に通信時は空)」となります。


STEP1-3:Server Hello

   Client Helloを受け取ったサーバは、Server Helloメッセージで応答します。Server Helloメッセージで送信する代表的な内容は「利用可能なSSLバージョン番号」「現在時刻」「利用することにした暗号化アルゴリズムとハッシュ関数の組み合わせ」となります。


STEP2:通信相手が本物かどうか確認する

   続いて、通信相手のWebサーバが本物かどうか確認します。ここでは、先ほど解説した「デジタル証明書」が登場します。


STEP2-1:Server Certificate

   クライアントにデジタル証明書を送信します。


STEP2-2:Server Hello Done

   Webサーバから必要なメッセージがすべて送信されたことを通知するメッセージです。これを受けて、クライアントはデジタル証明書の内容を検証します。ここで、問題なければ、正しい通信相手であると判断します。

   しかし、検証した結果問題があった場合、クライアント(Webブラウザ)は警告を表示します。警告を表示する条件は「Webブラウザが信頼しているCAが証明している証明書でない場合」「有効期限が切れている証明書の場合」「証明書内で設定されたURLと実際に運用されているURLが異なる証明書の場合」などがあります。


STEP3:暗号化に使用する鍵を準備する

   続いて暗号化に使用する共通鍵をクライアント側で生成し、Webサーバに渡します。


STEP3-1:Client Key Exchange

   Webサーバの認証を終えたクライアント側では、共通鍵(注1)を生成してWebサーバの公開鍵で暗号化し、Webサーバに送信します。Webサーバは暗号化された共通鍵を自分の秘密鍵で復号化します。

※注1: 厳密には共通鍵ではなく、プレマスターシークレットと呼ばれる384バイトの値を生成します。この値を基にクライアント・Webサーバそれぞれでハッシュ関数から共通鍵を生成します。


STEP4:暗号化通信を開始・終了する

   使用する暗号化アルゴリズムを確認し、暗号化通信を開始します。


STEP4-1:Change Cipher Spec

   Client HelloメッセージとServer Helloメッセージをやり取りした際に取り決めた暗号化アルゴリズムを使って、暗号化通信を開始する旨をクライアントがWebサーバに対して宣言します。


STEP4-2:Finished

   クライアントが、セッション確立のために必要なデータがそろったことをWebサーバに知らせるためのメッセージです。


STEP4-3:Change Cipher Spec

   クライアントからのChage Cipher Specメッセージに応答し、暗号化通信を開始する旨をクライアントに対して応答するメッセージです。


STEP4-4:Finished

   Webサーバからクライアントに暗号化通信の準備が完了したことを知らせるためのメッセージです。SSLでは以上のメッセージをクライアントとWebサーバでやり取りし、暗号化通信をしています。また、パケットキャプチャツールを利用すれば、実際の通信内容を見ることも可能です。パケットキャプチャツールとしてはWireSharkが利用できます。



まとめ

   今回は「SSLとは何か」「どのようなメカニズムなのか」また「クライアントとWebサーバ間でどのようなやり取りがされているのか」を解説しました。次回はこのSSLを皆さんの環境でも利用する方法を解説します。

前のページ  1  2  3


株式会社ビーブレイクシステムズ  木下 喜雄
著者プロフィール
株式会社ビーブレイクシステムズ  木下 喜雄
Javaスペシャリスト。前職ではCOBOL、Visual Basicを用いた大規模流通業向けシステム開発を行う。その現場で大規模システム構築時の開発効率の向上を目指してオブジェクト指向的な考え方を身につける。その後独学でJava言語を習得し、Java専業ベンダーであるビーブレイクシステムズに転職、現在は、Javaを用いた開発だけではなくお客様とのリアルコミュニケーションを実現できるマルチなエンジニアを目指し、日々奮闘中。


INDEX
第6回:SSLの基本を押さえる
  SSL(Secure Sockets Layer)とは?
  デジタル署名のメカニズム
SSLで暗号化通信をする際の動作内容