名古屋市のフロントエンドエンジニアがWEB制作に関する技術メモを書いています

メニュー

SSL化されたサイトは安全・・・ではない場合もある!SSLの仕組みを理解しよう!

最終更新日:

公開日:2017年08月25日

その他

どうも、くーへいです。

本日はSSLについてお話ししたいと思います。
私はネットワークの専門家ではありませんので、間違い等があればご指摘ください。

SSLとは?

SSLはSecure Sockets Layerの略で、通信相手を認証し、通信内容を暗号化することを目的としたプロトコルです。
SSL2.0およびSSL3.0はいくつかの致命的な脆弱性を含んでおり、現在は使用が推奨されていません。
現在においても単に「SSL」と表現する機会は多いですが、その場合は使用上の「SSL」および「TLS」の両方を含んでいると考えて良いでしょう。
「SSL」の次に策定されたのが「TLS」です。

TLSはTransport Layer Securityの略で、目的はSSLと変わりません。
TLS1.0から始まり、2017年8月現在の最新バージョンはTLS1.2です。(1.3が策定作業中)

この記事では、単に「SSL」と表現した際は「TLS」も含むものとして書くこととします。

SSL化したから安全・・・というのは半分正解で半分不正解

前述のとおり、SSL化することで通信相手を認証し、通信内容を暗号化することができます。
じゃあ安全なのでは?と考える人も多いのですが、必ずしもそうとは言えない状況も考えられます。

例として、あなたがAさんのサイトにアクセスした場合を考えてみましょう。
AさんのサイトはAさんの所有するサーバーに構築されているものとします。

通信相手を認証する

まず、「通信相手を認証する」という点についてです。
「認証する」ということは、通信相手であるAさんのサーバーについて、間違いなくAさんのサーバーであることを証明することを指します。
ここが1つ目の落とし穴なのですが、SSLという技術は、「Aさんのサーバーであると証明されたかどうか」を伝えることはできますが、「Aさんのサーバーであることを証明する」ことはできません。

「Aさんのサーバーであることを証明する」ことはインターネット上では意外に難しいことです。
想像してみてください。例えば「google.com」がSSL化されていなかったとして、「google.com」のサーバーをGoogle社が所有しているとどうやって確認するのでしょうか?
少しWebに詳しい人なら、「google.com」のwhois情報を確認すればいい、と考えるかもしれません。
しかし、whois情報に正しい情報を入力しなければならないという義務は残念ながらありません。
Google社ではない誰かが、Google社の名前をかたっている可能性もあります。

ですので、SSL化されたサーバーがなりすましによるものでないことを確認するためには、Aさん以外の人が、「このサーバーはAさんのサーバーであることを証明します」という、いわゆる証明書が必要になるわけです。
しかし、ここに2つ目の落とし穴が存在します。
それは、証明書の種類によっては、「誰でも作成することができる」ということです。

証明書の種類にはざっくりと以下の4種類が存在します。

・自己認証
・ドメイン認証
・企業認証
・EV認証

自己認証

自己認証は読んで字のごとく、自分で自分自身を証明してしまいます。
もうお分かりと思いますが、先述の例でいえば、「AさんがAさん自身でAさんですよ」と証明していることになります。
そのため、「BさんがBさん自身でAさんですよ」と言ってしまうことも可能ですので、認証としての意味はほとんどありません。

上記のような事情がありますので、自己認証によるSSL通信は安全と言えず、Google検索では「安全ではないサイト」として警告が発せられる可能性があります。
場合によってはアクセスがほぼ0になってしまう可能性もありますので、絶対に使用しないようにしましょう。

ドメイン認証

ドメインとサーバーの関係は、住宅で言うところの住所と家そのものの関係に似ています。
住所が1つであれば、基本的に家は1つですので、同様に1つのドメインは1つのサーバーを指します。
そこで、先述の例でいうと、「Aさんのサーバーの所有者は、Aさんのドメインの所有者と同じです」ということを第三者が認証することをドメイン認証と言います。

しかしながら、Googleの例でも述べた通り、BさんがAさんを思わせるドメイン名を取得し、ドメイン認証することでAさんのサーバーのように見せることは可能です。
現状、大抵のSSL化されたサーバーはこのドメイン認証を使用していますが、これはこれ以上正確な証明を行おうとした場合、「法人であること」「証明書取得に時間をかけることができること」「証明書取得にお金を支払うことが可能なこと」などのハードルを越えなければならないからでしょう。

企業認証

あるサーバーおよびドメインを、特定の法人が確かに所有していることを証明します。
この証明には一般的に申請者がドメインのwhoisと一致しているかどうか、その申請者が法的に存在しているかどうかを確認します。
法人でなければ申請できませんし、少なくともドメインの所有者が法的に存在する法人であることは証明されます。

EV認証

企業証明よりもさらに厳格に法人をチェックします。
申請には登記事項証明書が必要ですし、物理的にその法人が存在していなければなりません。
登記だけ行われた法人では登録できないようになっています。

どんな証明書を取得していても防げないこと

EV認証のような証明書を取得していたら、なりすましにあうことはないのでは?と思うかもしれません。
しかしながら、もし、Aさんが正確な証明書を取得し、Aさんのサーバーであると証明していたとしても、ドメインとサーバーをBさんが乗っ取ってしまった場合、あなたがそれに気付くことは困難です。

通信内容を暗号化する

SSLを使用していない通信は、基本的には暗号化されずに様々な場所を経由して情報が伝達されます。
暗号化されていない通信は、途中で傍受されてしまえば簡単に様々な情報を抜き取ることができてしまいます。
例えば、ネットショップで買い物をする際、クレジットカードを使用したとして、暗号化されずに送信していたとすると、あなたが入力したクレジットカード番号は少し知識のある人にはすぐに盗まれてしまうことになります。

そこで、通信内容そのものを暗号化するという手法がとられますが、その暗号化の方式にもいくつか種類があります。
種類が豊富なうえ、私も詳しくないので1つ1つ解説はできませんが、最近はコンピューターの処理速度も飛躍的に向上してきましたので、暗号化の形式が古い場合、短時間で解読ができてしまう可能性があります。

たとえ、上記のEV認証で確実にAさんが運営しているサーバーであっても、暗号の強度が弱いと途中で傍受・解読され、結果的に情報が漏洩する危険性があります。

古いブラウザでは閲覧できないという可能性もありますが、できるだけ安全性の高い暗号形式を使用しましょう。

まとめ

長くなってしまいましたが、「SSL化したから安全・・・というのは半分正解で半分不正解」という意味をご理解いただけましたでしょうか?
自己認証のようなSSL化では安全とは言えませんし、EV認証をしていたとしても100%はありえません。
また、暗号強度が弱かった場合でも簡単に解読されてしまうでしょう。

とはいえ、SSL化したことで安全性が増すことは紛れもない事実です。
また、SSL化は安全性だけではないメリットも存在します。
この点は次の記事で解説したいと思います。

SSL化という作業は大変かと思いますが、これからはSSL化は必須です。
着実にSSL化を実行していきましょう!

関連記事

Twitterにて更新情報などを配信しています

スポンサードリンク