アプリケーション層プロトコルへの適用について説明します。
SSLは特定のアプリケーション層プロトコルに依存しないため、HTTP以外にも多くのプロトコルにおいて採用され、クレジットカード情報や個人情報、その他の機密情報を通信する際の手段として活用されています。
既存のアプリケーション層プロトコルでSSLを利用する場合、大きく2つの適用方式が考えられます。
まずひとつは、下位層(通常はTCP)の接続を確立したらすぐにSSLのネゴシエーションを開始し、SSL接続が確立してからアプリケーション層プロトコルの通信を開始する方式である。
もうひとつは、まず既存のアプリケーション層プロトコルで通信を開始し、その中でSSLへの切り替えを指示する方式です。
前者はアプリケーション層のプロトコルをまったく変更しなくてすむことが利点です。
その反面、既存のポート番号とは別にSSL対応用のポート番号が必要となる。
実態としては、SSLの最初の適用例であるHTTPをはじめとして、前者の方式を使うことが多い。
前者の方式のもうひとつの問題点として、名前ベースのバーチャルホストを提供できないという点があります。
なぜなら、証明書の検証はSSLネゴシエーションの一部として実施されますが、この時点ではアプリケーション層の通信が開始されていないためサーバはホスト名を知らず、証明書を使い分けることができないためです。
例外として、発行先ホスト名にワイルドカードを含めた1種類の証明書で対応できる場合は、証明書を使い分ける必要がないので、名前ベースのバーチャルホストを提供できます。
またIPアドレスベースのバーチャルホストであれば、SSLネゴシエーションの時点でIPアドレスは既知なので、問題ありません。