今こそ知ってもらいたいSSL/TLSのお話

はじめまして、さくらインターネットのやまけんこと、山田健一です。

今回から複数回にわたり、「SSL/TLSとは何なんだ? 今こそ知ってもらいたいSSL/TLSのお話」と言うことで、SSL/TLSに関するお話をさせていただこうと思います。記念すべき第1回目は、「SSL/TLSとは」という導入部分のお話です。SEO対策の中でも「常時SSL化」など言われたりしていますが、そもそもSSLとはなんでしょうか。さらにはTLSという言葉も聞きますがこちらもなんでしょうか。筆者が寄稿した さくらのSSLSSLコラム にあります SSLとTLSの違いとは を再構成の上ご案内いたします。

SSLとは

SSL(Secure Sockets Layer)とは、安全に通信をするためのセキュリティプロトコルです。このセキュリティプロトコルが開発された背景には、インターネット利用者の拡大があります。

インターネットができた初期の頃は、セキュリティに対する配慮はほとんどありませんでした。特に、通信の根幹となるプロトコルは、知識のある第三者が覗こうと思えば覗けてしまったり、改ざんできてしまうぐらい脆弱なものでした。(根幹となるプロトコルは変わっていないので、実は現在も安全ではありません)

これはインターネットに関わる人々や装置が、すべて紳士のように誠実に振る舞うことが前提の性善説の上に成り立っていたからです。しかし、主に大学や研究機関が使用しており、まだ商用インターネットが普及する80年代後半までであれば問題になりませんでしたが、1990年代中盤より商用インターネットの普及によって、不特定多数の人々が誰でもインターネットに接続できる状況では、セキュリティにも配慮する必要が出てきました。特に現在ではゲーム機、スマートフォンなどのガジェットだけではなく、家のドアの鍵やエアコン、照明などいたるものがインターネットに繋がるようになると、なおのことセキュリティが重要となります。

そのため、セキュリティを必要とする通信のために作られたのがSSL、すなわちSecure Sockets Layerになります。

SSL という言葉をインターネットで検索すると、SSL/TLS という言葉が検索結果として表示されるかと思います。これらは本質的には同じプロトコルではあるものの、2つの名前がついているのにはきちんとした理由があります。

SSLとTLSの歴史

SSLの誕生

SSLは1990年代中頃、当時の主要なブラウザ Netscape Navigator を制作していた Netscape Communications社 で開発されました。SSLプロトコルの最初のバージョンである「SSL 1.0」は、プロトコル自体に重大な欠陥があったため、公開されることはありませんでした。

次のバージョンである「SSL 2.0」が1994年11月にリリースされました。ブラウザへ実装されたのが 1995年3月にリリースされた Netscape Navigator 1.1 が最初でした。また、1995年11月27日にリリースされた Internet Explorer 2.0 でも実装されました。

しかし、この「SSL 2.0」は外部のセキュリティアドバイザーに全く相談せずに開発されたため、のちに重大な脆弱性が発見されてしまいます。そのために、Netscape社は次の新たなプロトコル開発をしなければなりませんでした。2011年3月にはIETFによって「SSL 2.0」の使用は禁止されました。(RFC6176)

1995年11月に「SSL 3.0」(RFC6101) がリリースされました。ブラウザへ実装されたのが 1996年3月にリリースされた Netscape Navigator  2.0 が最初でした。また、1996年8月13日にリリースされた Internet Explorer 3.0 でも実装されました。名前こそSSLとなっていますが、その設計は根本から見直され、のちに紹介する現在のTLSプロトコルの基本設計となります。しかし、「SSL 3.0」も2014年9月に仕様上の脆弱性(POODLE)が発見され、根本的な対処法としては「SSL 3.0」を無効化するしか方法がありませんでした。そのため、2015年6月にはIETFによって「SSL 3.0」の使用は禁止されました。(RFC7568)

SSLを引き継いだTLSとは

1996年5月、SSLをNetscape社からIETFへ移管するために、TLSワーキンググループが結成されました。これは当時のブラウザにおいて、Netscape社の Netscape Navigator と Microsoft社の Internet Explorer による激しいシェア争いが行われる中で、安全なインターネット通信を実現するためにセキュリティプロトコルとして広く使われ始めたSSLを、セキュリティ専門家を交えた第三者機関で開発するための措置でした。

1999年1月、TLS(Transport Layer Security)という名称で「TLS 1.0」がリリース(RFC2246)され、実質SSLからTLSへと移行しました。「SSL 3.0」との違いはわずかですが、両バージョンの互換性はありません。

2006年4月にはTLSの改良として「TLS 1.1」がリリース(RFC4346)され、それまでに発見された攻撃手法に対応することを目的としたセキュリティの強化が行われました。

2008年8月には「TLS 1.2」がリリースされ、脆弱性のある古い仕組みの排除や、最新の暗号化に対応するなど、安全性を高める改良が行われています。ブラウザではWindows7以上の Internet Explorer 8 や Google Chrome 30 , Mozilla Firefox 23 , Mac OS X v10.9以降のSafari 7などが対応しています。

2018年8月には現在の最新バージョンである「TLS 1.3」がリリース(RFC8446)されました。古い脆弱な暗号化が大幅に無効化される予定となっており、安全性をさらに高める改良が行われています。ブラウザでは Firefox 63 や Google Chrome 70 や macOS 10.14.4以降のSafari 12で対応となっています。

また、2020年ごろをめどに主要なブラウザでTLS1.0と1.1を無効化する方針が発表されています。そのため、TLS1.2や1.3への対応が必須になりそうです。

SSLとTLSの違いは?

冒頭にて「SSL/TLS という言葉が検索結果として表示されるかと思います。これらは本質的には同じプロトコルではあるものの、2つの名前がついているのにはきちんとした理由があります」と書いておりましたが、上記で歴史を振り返ったとおり、TLSはSSLの次世代規格です。現在一般的に「SSL」と呼んでいるものは実質「TLS」を指していることも多く、場合によってはその両方をふまえて「SSL/TLS」と表記されることもあります。厳密に考えると別物ですが、いずれも安全に通信をするためのセキュリティプロトコルだと覚えておくと良いでしょう。

こちらの連載の中でも、これらプロトコルの歴史を踏まえた上で、両方のプロトコルに関係する記載については SSL/TLS 、SSLに限ったお話の場合は SSL 、それ以外は TLS と明確に表記をさせていただきます。

次回は、最新プロトコルバージョンの TLS1.3 と HTTP/2 についてご紹介いたします。