まず,SSLを使うと何ができるのかを見ていこう。SSLが持つ機能は大きく二つある。「データの暗号化」と「通信相手が信頼できることの確認」(認証)だ(図1-1)。

図1-1●SSLはインターネット上でデータを安全にやりとりするプロトコル
図1-1●SSLはインターネット上でデータを安全にやりとりするプロトコル
接続相手のサーバーが信頼できるかどうかを確かめたうえで,データを暗号化してやりとりする。クレジットカード情報などをやりとりするWebショッピングには欠かせない機能だ。
[画像のクリックで拡大表示]

暗号化と相手認証の機能を持つ

 Webアクセスをしていると,個人情報など,他人に見られたくないデータをやりとりするケースが出てくる。そんなときにSSLを使って,インターネットでやりとりするデータを暗号化し,万一データが見られても内容がわからないようにする。クライアントがデータを暗号化してインターネットに送り出し,この暗号化データを受け取ったサーバーが元のデータを取り出す。こうして,通信途中でやりとりの内容を見られることを防ぐわけだ。

 また,大事なデータを送るときには,通信相手のサーバーが,なりすまされた相手ではなく,自分の信頼できる相手かどうかを確かめる必要も出てくる。そこでSSLには,通信相手が信頼のおけるサーバーかどうかを確かめる機能も備わっている。これは,クライアントがサーバーから「サーバー証明書」と呼ばれる情報を受け取り,そのサーバー証明書を検証することで,通信相手のサーバーが信頼できるかどうかを判断するしくみになっている。

 SSLは「Webアクセス」でやりとりされるデータの暗号化によく使われる。だが実際は,アプリケーションの種類は問わない汎用的なプロトコルになっている。つまり,HTTP以外にもメールやFTPといったアプリケーションのデータを暗号化することも可能である

アプリとTCPの間に位置する

 次に,SSLが通信全体のどの部分に位置するのかを見てみよう。Webアクセスに登場するさまざまなプロトコルとSSLの関係を確認する(図1-2)。

図1-2●TCPとアプリケーションの間で動作する
図1-2●TCPとアプリケーションの間で動作する
アプリケーションがTCPにデータを渡すところにSSLが介在して,データを暗号化する。
[画像のクリックで拡大表示]

 通常のWebアクセスは,Webブラウザから「http://」で始まるURLで指定したサーバーあてに要求を送る。このときWebブラウザはTCPにデータを渡す。SSL(SSLクライアント)は,このWebブラウザとTCPの間に位置する。Webブラウザが「https://」で始まるURLのサーバーあてにデータを送るとき,WebブラウザはTCPではなくSSLにデータを渡す。そしてSSLは,ブラウザから受け取ったデータを暗号化してから改めてTCPへ渡す。

 暗号データを受け取ったTCPは,このデータがSSLのデータであることを示すため,TCPパケットに「443番ポートあて」と明記する。このデータが,IP,イーサネットと渡って回線上に送り出される。以上が,SSLの暗号通信における送信時の流れである。

 受信時は,送信時の流れとは逆の流れになる。受信側では,TCPパケットに書かれた「443番ポート」の表示を見て,このデータがSSLによって暗号化されていることがわかる。そこでサーバー側のSSL(SSLサーバー)は,暗号化されたデータを復号してWebサーバー・ソフトへ渡す。

 SSLはこのように,アプリケーションとTCPの間に位置して,データの暗号化と復号の作業をしているわけだ。

標準化したTLSも内容は同じ

 SSLは元々,米ネットスケープ・コミュニケーションズが開発した独自仕様のプロトコルだった。その後,Webアクセスの普及とともに,SSLをベースとした標準技術も登場した。それがTLSである。

 SSLとTLSの動作と機能はほぼ同じである。現在は,SSL3.0とTLS1.0が一般的に使われており,Internet Explorer7やFirefox2でもデフォルトでこの二つが使えるようになっている