この特集のトップページへ

Directory first step 4... ディレクトリサービスを支えるテクノロジ群
sankaku.gif SSL(Secure Sockets Layer)プロトコル

 SSLプロトコルは,Netscape Communications社がクライアントとサーバーとのあいだで送信されるデータを暗号化するために開発し,ブラウザに組み込んで無償で配布したため,広く利用されるようになった。プロトコルはアプリケーションに依存しないので,いろいろなアプリケーションで,送信データを保護し,認証された通信チャネルを確立するために利用されている。

 クライアントとサーバーとのあいだで新規にSSLプロトコルで通信チャネルを開設する場合には,次のような手順で認証が実行される。

  1. クライアントは,自分が使用できる暗号化アルゴリズムや圧縮アルゴリズムのリストを含んだHelloメッセージをサーバーに送信する。既存のセッションを利用する場合は,そのセッションIDを設定して送信し,サーバーからServer Helloメッセージが返ってくるのを待つ。
  2. Helloメッセージを受信したサーバーは,クライアントから受信したリストのなかから,クライアントとのあいだで使用する暗号化アルゴリズムと圧縮アルゴリズムを選択し,それをServer Helloメッセージに格納してクライアントに返す。既存セッションの利用を許可するのであれば,このメッセージをクライアントに送信することで,ネゴシエーションは完了する。
  3. サーバーは,自分の身元を証明する証明書を添付したServer Certificateメッセージ(証明書がない場合はServer Key Exchangeメッセージ),クライアントに証明書の提示を求めるCertificate Requestメッセージ,Server Hello Doneメッセージを,順次クライアントに送信し,クライアントから証明書が送られてくるのを待つ。
  4. クライアントは,Certificate RequestメッセージとServer Hello Doneメッセージを受信したら,サーバーの証明書を確認し,間違いなく自分がアクセスしようとしているサーバーであるかどうかを判別する。そして,自分の証明書を添付したClient Certificateメッセージをサーバーに送信する。暗号化にRSAを利用する場合,クライアントは,自分で生成した乱数とプロトコルのバージョン番号を,Server CertificateメッセージまたはServer Key Exchangeメッセージから取得したサーバーの公開鍵で暗号化し,それをClient Key Exchangeメッセージに格納してサーバーへと送信する。さらに,証明書に指定されているアルゴリズムが秘密鍵による暗号化をサポートしているならば,クライアントは自分の秘密鍵で暗号化したマスタ鍵をCertificate Verifyメッセージでサーバーに送信する。
  5. クライアントは,ネゴシエーションされた暗号化アルゴリズムで通信することを宣言するChange Cipher Spec Protocolメッセージと,セッション確立のために必要なデータの送信終了を宣言するFinishedメッセージを,サーバーに送信する。
  6. サーバーは,Client Certificateメッセージから証明書を抽出し,クライアントを確認する。そして,Client Key Exchangeメッセージを自分の秘密鍵で復号化し,プロトコルのバージョン番号とクライアントが生成した乱数を抽出する。また,それらのメッセージに引き続いてCertificate Verifyメッセージを受信した場合には,このメッセージからマスタ鍵を取り出す。
  7. サーバーは,Change Cipher Spec Protocolメッセージと,新しいセッションIDを格納したFinishedメッセージをクライアントに送信し,新しいセッションを確立する。
  8. クライアントは,サーバーから送信されてきた新しいセッションIDを使用し,サーバーと通信する。

 なお,SSLは米国の輸出制限の対象となっているため,日本国内で利用できるSSLは暗号化の鍵長が短い。このため,必ずしも安全性が高いとはいえないが,Active DirectoryやNetscape Directory Serverなどで利用されている。

Fig.11 SSLの動作概念
fig11.gif
prevpg.gif Directory first step(前編) 18/21 nextpg.gif