SSL/TLS通信って一度は聞いた事あるかもしれませんがどのような仕組みになっているのでしょうか?今回もそんな気になる所に迫ってみました。
それでは、さっそく始めていきましょう。
SSL/TLSとは

SSL (Secure Soket Layer) ・TLS (Transport Layer Security) とはネットワーク上のデータを暗号化するためのプロトコルです。URLが「https://」となっているのがSSL/TLSの目印となります。
個人情報など機密性の高いデータを送受信する際、このSSL/TLSを導入することで第三者による改ざん・なりすましのリスクを防ぎセキュリティを高めることができます。
逆を言えばこのSSL/TLSを導入していないブログやサイトは注意が必要です。
氏名・住所・クレジットカード番号などの個人情報が、第三者に漏洩してしまうリスクが高まるということを意味します。
photo by Sean MacEntee
SSL/TLSのバージョン
SSL/TLSにはいくつかバージョンが存在します。元々はSSLとしてネットスケープ社が開発しました。
現在使われているバージョンはTLS1.2になります。なぜSSL/TLS (またはSSL) と呼ぶかというとSSLという名称があまりにも世間に広まったためSSLを名称につけようということでこうなりました。SSLを名称としてわかりやすく付けているだけで本来はTLSという事になります。
- SSL1.0… ネットスケープ社によって開発されましたが、発表前に脆弱性が発見されたのでこのバージョンは発表されていません。つまり世に出なかったバージョンです。
- SSL2.0… 1994年にネットスケープ社が発表。その後いくつかの脆弱性が発見されました。
- SSL3.0… 1995年に発表。2014年10月にPOODLEという深刻な脆弱性がGoogleセキュリティチームにより発表されました。その後SSL3.0以前の対応は中止、TLS1.0からという流れになっています。
- TLS1.0… 1999年に発表。IETFにより標準化「RFC2246」
- TLS1.1… 2006年に発表。「RFC4346」
- TLS1.2… 2008年に発表。「RFC5245」 現時点での最新バージョンです。もちろん安全性は一番高いです。
- TLS1.3… 現時点でまだ発表されていません。近いうち発表されるだろうという技術です。
SSL3.0の脆弱性POODLEについて
2014年10月14日 (米国時間) GoogleのセキュリティチームによってSSL3.0の脆弱性POODLEが発表されました。このPOODLEはSSL3.0によって暗号化されているデータの一部を第三者が読み取る事が出来る可能性があるという事で問題視されました。
この脆弱性への対策としてはクライアント側かサーバー側どちらかでSSL3.0を無効化にすれば良いとの事で、2014年度末から2015年度中には様々なWEBサイト・WEBサービスにおいてSSL3.0の利用を停止して対応がされています。
Google Chromeの場合は右上メニューから「設定」→「詳細設定を表示」→「プロキシ設定の変更」→「詳細設定」から確認出来ます。現バージョンはこのようにデフォルトで無効になっています。他の主要ブラウザも対応しているようです。

「SSL/TLS」WEBページのバージョン確認
今見ているWEBページで使用しているSSL/TLSバージョンを確認したい時の方法です。Googleヘルプの「Chromeでのサイト接続を確認する」ページがSSL化されているので確認してみます。
▼URL入力欄にある「鍵マーク」→「接続」とクリックします。
するとそのWEBページに使用されているSSL/TLSバージョンが確認できます。
Quicプロトコル
「Quic (クイック)」とはGoogleが開発した高速なアクセスを目的とし、もちろん暗号化する事ができるというプロトコルです。2013年に発表されました。
後述するISO参照モデルでいう所のトランスポート層 (レイヤ4) にあたります。SSLの一つ下の層からという事ですね。
試しに「Google.co.jp」を確認するとURLは「https://」となっているのにSSLではなく「Quic」の技術が使われている事がわかります。
結構複雑な技術のようで私自身まだそれ以上の詳しいところはまだわかりません。次世代のプロトコルという所でしょうか。
OpenSSL
OpenSSL (オープンエスエスエル) というのはSSL/TLSの機能を実装したオープンソースのライブラリ (プログラムの部品)です。
2014年に「Heartbleed (ハードブリード)」という脆弱性が発表されました。その他にも「FREAK」「Logjam」という脆弱性、または脆弱性をついた改ざんなどの可能性が発表され、アップデートなどでその都度対策されているそうです。
SSLの技術

ハイブリッド方式
SSLにはハイブリッド方式という技術が使われています。これは共通鍵暗号方式と公開鍵暗号方式という2つの暗号方式を合わせた技術になります。
- 共通鍵暗号方式
この方式は暗号化と復号化に同じ共通鍵を使うという方式です。共通鍵はクライアント側から生成されデータを暗号化するのに使われますが、そのままサーバー側へ送ると受け渡しの際の安全面で疑問点が残るので後述する公開鍵で共通鍵を暗号化させて安全な状態で通信をします。
- 公開鍵暗号方式
公開鍵暗号方式では「公開鍵+秘密鍵」がセットになっています。公開鍵の方はクライアント側の名前の通り誰にでも公開されているという鍵です。
一方秘密鍵はサーバー側が保持している鍵で、どちらの鍵からでも暗号化出来ます。どちらからの暗号化でも復号化する時は、2つの鍵が正しいペアにならないと復号化できないので安全性が保たれます。ただし共通鍵暗号方式よりも時間がかかります。
SSLサーバ証明書とは?
SSLサーバ証明書は認証機関 (CA) が発行する電子証明書です。WEBサーバに配置してあります。証明書には信頼度のランクがあります。
【信頼度低い】DV < OV < EV【信頼度高い】
常時SSL化という流れ
個人情報を取り扱うページで主に使われていて、最近では「常時SSL化」という言葉もひろまってきています。「常時SSL化」というのは従来のSSL化は個人情報を入力したりして安全性が問われるページのみSSL化していたのを、自サイト全体のWEBページをSSL化しましょうという試みです。
大手WEBサイト・サービスが常時SSL化
- 2012年2月… Twitter
- 2012年3月… Google検索
- 2012年11月… Facebook
- 2015年6月… Wikipedia
ブログにも常時SSL化という流れも・・
実は一部のブロガー達の間でもこの「常時SSL化」という流れがきているようです。私は大のブログを見る側のユーザーでもあるので実際に「常時SSL化」されているブログもたまに見かけます。
なぜこのような流れが一部で来ているかというと・・ Googleが「SSL化されたWEBサイトは評価として有利になります」という内容の発表をしたからです。その流れで「よし!それなら常時SSL化しよう」というブログもあるにはあるようです。
ただGooglebotのブログに対する評価全体で言えば、今後はどうなるかというところですが現時点ではそれ程大きな影響はないみたいです。
まとめ
SSLは思っていた以上に複雑な仕組みで完全になめてかかってました。大まかな流れは把握してきましたが、私のような元情弱がSSLについて全くの無知から全て把握していくには一気にではなく少しずつブロックを崩していく感覚の方がいいようです。
デジタル署名とか改ざん対策のハッシュ値のアルゴリズムとか複雑な部分は、途中からぐだぐだになってきたので今回省略しました。ちなみにハッシュ値はもしファイルが改ざんされてもそれを検知できるという仕組みになっています。
もっと把握するにはまだまだボリュームがあるのでいくつかの記事にわけた方が良いとも思いました。SSL、また少し気になったGoogleの技術Quicについてはそのうちまとめるかもしれません。