HTTPSサイトは安全なサイトということは、多くの人が知っていると思います。
しかし、実際はどのように HTTPSサイト が安全に通信されているのかについては、意外と知らない人も多いのではないでしょうか?
そこで今回は、SSL (HTTPS) 通信の仕組みについて紹介します。
技術的な内容などの専門的で難しいことは抜きにして、できるだけわかりやすく、図を入れながら解説していきます。
自分のサイトにSSLを導入する(している)ならば、基本的なことだけでも理解しておきたいものですね。
SSL暗号化通信で防ぐセキュリティ・リスク
まずは、WebサイトをHTTPS配信にしないことで起こり得る危険性について簡単におさらいしておきましょう。
SSL暗号化通信によって、以下のような危険からユーザーやWebサイトを守ることができます。
データの改竄
送受信されるデータを改竄する行為です。
例えば、あるネット通販でネックレスを1つ注文したのに、データが改竄されて100個注文したことにされてしまい、金額も100個分請求された、といった具合です。
盗聴
送受信されるデータから情報を盗み取る行為です。
なりすまし・フィッシング
本家のサイトになりすまして、偽のサイトに誘導し個人情報などを盗み取る行為や、盗んだ情報を悪用して他人になりすまして悪事を働く行為です。
それと、よく大手企業の名を語った(なりすまし)偽メールを送り、そこに記載されているリンクから偽のサイトに誘導する(フィッシング)犯罪もありますねね。
EV認証型の証明書ではアドレスバーの表示が変わるため、フィッシング詐欺の防止にも一役買ってくれることがあります。
企業が偽メールの注意喚起を促すメールでも、アドレスバーを確認するように通知していることがありますね。
SSLサーバー証明書の信頼性はルート証明書で判断する
HTTPSで配信するには、SSLサーバー証明書をサーバーにインストールしておく必要があります。
SSLサーバー証明書は 3 または 4階層からできていて、その最上位の階層にあるのがルート証明書です。
ルート証明書はWebブラウザにもあらかじめ情報が登録されていて、サーバーから送られてくる証明書と照合します。
ハッシュ関数というアルゴリズムを用いて「証明書が改竄されていないか」といったことを確認します。
照合した結果、ルート証明書にある認証局の署名が一致すれば、信頼できる証明書と判断します。
ブラウザに登録されるルート証明書は、ブラウザのバージョンアップなどに伴ってアップデートされていて、新たなルート証明書の追加や、安全性に疑いのある証明書の削除などが随時行われています。
2017年8月: シマンテックのSSL事業は Digicert に売却されるというニュースがありました。シマンテックの証明書の安全性について、以前から指摘されていたことと関係があるようです。
SSL通信で使われる2つの暗号方式
暗号のやり取りには、暗号鍵 (あんごうかぎ) を使います。
暗号鍵とは、同じ暗号アルゴリズムを用いても、個々に異なる手順で暗号化できるようにする一定の規則のことです。
通信をする相手全員に全く同じ暗号手順を行っていたら、誰でも暗号を復号(暗号を解いて元に戻す)できてしまうので、暗号化しても安全ではありませんね。
そこで、相手ごとに暗号手順をカスタマイズするために暗号鍵を用います
そうすれば「あなたと私にしかわからない暗号」が一丁出来上がり、というわけです。
SSLでは、2つの暗号方式を組み合わせて安全な接続を確立します。
共通鍵暗号方式
共通鍵暗号方式とは、暗号化と復号に同じ暗号鍵を用いる暗号方式です。
サーバーとブラウザ(クライアント)の二者間のみで利用する共通鍵を生成し、互いに暗号化・復号をしながら安全に送受信を行うことができます。
共通鍵暗号方式は、暗号化・復号の処理が速いのがメリットです。
ですので、共通鍵を使って通信したいところなのですが、1つ問題があります。
それは、共通鍵をどうやって安全に相手に渡すかという問題です。
インターネットは、不特定の相手と暗号化通信をするので、あらかじめ相手方に共通鍵を渡しておくことはできません。
共通鍵を渡す段階では、通信は暗号化されていないため、第三者に盗み取られてしまう危険性があります。
公開鍵暗号方式
公開鍵暗号方式では、公開鍵と秘密鍵という2つの暗号鍵がペアになっていて、どちらか一方で暗号化したものは、もう一方の暗号鍵でないと復号できない仕組みになっています。
秘密鍵で暗号化したものは公開鍵でないと復号できず、逆に、公開鍵で暗号化したものは秘密鍵でないと復号できない、という具合です。
公開鍵暗号方式は、鍵と錠の関係をイメージするとわかりやすいと思います。
秘密鍵はサーバーのみが保有し、通信相手は公開鍵を受け取ります。
もし公開鍵を受け取る時に盗み取られたとしても、秘密鍵がなければ復号できないので安全です。
公開鍵暗号方式は、暗号化・復号にかかる処理が遅いというデメリットがあります。
SSL通信の仕組みと流れ
2つの暗号方式を理解した上で、どのようにHTTPSサイトが接続されているのか、その仕組みと流れを確認しましょう。
1. SSLサーバー証明書と公開鍵を送る
サーバーが HTTPS での接続リクエストを受けると、はじめに SSLサーバー証明書 をクライアント側(ブラウザ)に送ります。
SSLサーバー証明書には公開鍵が含まれています。
公開鍵は、サーバー側にある秘密鍵でしか復号できないため、暗号化する前に送っても大丈夫ですね。
2. SSLサーバー証明書の有効性確認と共通鍵の生成
クライアントは、受け取った SSLサーバー証明書 の階層を辿りながら、サーバー側のルート証明書とブラウザ自身に登録されているルート証明書を照合します。
安全なWebサイトであることが確認できたら、クライアントは共通鍵を生成します。
3. 共通鍵を公開鍵で暗号化して送る
生成した共通鍵を盗まれないように、公開鍵で暗号化しサーバーに送信します。
サーバー側は、送られてきた公開鍵を秘密鍵で復号し、共通鍵を取り出します。
これで、サーバーとクライアントの両方が安全に共通鍵を持つことができました。
4. SSL通信を開始
あとは、共通鍵を使って暗号化通信をしていきます。
HTTPSサイトにアクセスしてから、最初にページが表示されるまでの間には、こういったやりとりが行われていたのですね。
まとめ
SSL通信の仕組みや流れについて理解できましたか?
どのような仕組みでHTTPSサイトに接続しているのか、大まかな流れだけでも知っておいて損はありませんね。
→ SSLサーバー証明書の種類と選び方
→ 大半がHTTPSサイト! 今すぐサイトをSSLにしなければいけない理由
最後に、SSLの仕組みと全体の流れをまとめた図を載せておきます。
コメントをどうぞ