SSLとは
SSL (Secure Sockets Layer)は、 HTTP (Hyper Text Transfer Protocol)やSMTP (Simple Mail Transfer Protocol)といったいろいろなアプリケーション・プロトコルで、 セキュアなチャンネル(通信路)を利用できるようにする仕組みです。 SSLによる通信データを暗号化する仕組みや鍵共有の仕組みは、 数々の攻撃手法ができることでセキュアではなくなったため、 2015年には利用が推奨されなくなりました*1。
SSLは、Webのビジネス利用が注目され始めた1994年に、 通信データ、特に商用のデータの保護を目的としてNetscape社で開発されました。 SSL 1.0は公開されることはなく、 1995年にSSL 2.0が当時Webブラウザとして多くのユーザーを抱えていた、 Netscape Navigatorに実装されます。
SSLのプログラミング・インタフェースは、 TCP/IPのソケット・プログラミングのインタフェースに似たものになっていて、 アプリケーションにおいて、そのプログラムを大きく変更せずに、 SSLのセキュア・チャンネルの機能を利用できるようになっています。 そのため、WebのHTTPだけでなく、 電子メールなどのさまざまな通信で利用しやすいようになっています。 アプリケーションに提供されるセキュア・チャンネルの特徴を下記に挙げます。
- 通信データを暗号化することで盗聴しても内容が分からないようにする
- 通信データが伝送される途中で改ざんされた時にそれを検出する
- 通信相手が正しいということを確認する
3.はSSLだけではなく、SSLのセッションが開始するときに関連付けられる電子証明書を使って行われます。 アクセスしているサーバのホスト名と電子証明書に記載されたホスト名が一致するかどうかを含め、 電子証明書は、アプリケーションのサーバやクライアント(Webブラウザなど)で確認されます。
SSLの後継のプロトコルであるTLSの利用にあたって、 RFC7568*2ではTLSからSSLへのフォールバックは禁止され、 弱いアルゴリズムなどを意図せずに使ってしまうように仕向けられる"ダウングレード攻撃"を避けるようになっています。
*1 The TLS Protocol Version 1.0
https://tools.ietf.org/html/rfc2246
*2 Deprecating Secure Sockets Layer Version 3.0
https://tools.ietf.org/html/rfc7568