このページではSSLが何か?そしてなぜ安全な通信が可能なのかを暗号化とSSL証明書の役割とともに誰にでも分かるように分かりやすく説明していきます。
・SSLが安全な理由を知りたい
・SSLが何なのか知りたい
・SSLの仕組みを知りたい
・SSLの暗号化方式を知りたい
・SSL証明書について知りたい
SSLとは安全性が強化された通信プロトコル
SSLはSecure Sockets Layerの略で、その名の通りセキュリティに関する仕組みです。
SSLの効果が分かりやすい例はネットショッピングです。インターネット上で買い物する場合、住所やクレジットカードの情報を登録する必要がありますよね?私も初めてネットショッピングした時はこの情報が他の人に見られないか不安でした。実は、この情報を他者から見れないようにしてくれているのがSSLなのです。
ネットショッピングの時に自分のPCで打ち込んだ住所や電話番号等の情報はWebサーバに送信されます。SSL対応していないと、これらの情報がそのまま送信されるため、その情報が盗まれ悪用される可能性が高いです。
しかしSSLはこの情報を暗号化してからWebサーバに情報を送信します。ですので、もし他の人にその情報を盗まれたとしても暗号化されているので、住所等の重要な情報を解読することができせん。
つまり、SSLとはデータを暗号化して通信する仕組みであり、SSL通信を行うことで安全な通信が可能です。
SSLが安全なのは暗号化と証明書のおかげ
SSLではどのように安全な通信を実現しているのでしょうか?SSL通信が安全な理由とその仕組みを解説していきます。SSLの安全性を担保する技術が暗号化とサーバ証明書です。
スポンサーリンク
暗号化
SSLでは暗号方式として、共通鍵暗号方式と公開鍵暗号方式の二つを組み合わせた方式を用いて通信データの暗号化を行なっています。
共通鍵暗号方式
共通鍵暗号方式で用いる鍵は一種類で、暗号化するのにも復号化するのにも同じ鍵を使用する方式です。この鍵は共通鍵と呼ばれます。クライアントとWebサーバ両方が同じ共通鍵を用いてデータの暗号化と復号化を行うことで安全な通信が可能です。
公開鍵暗号方式
共通鍵暗号方式で用いる鍵は二種類で、暗号化時に公開鍵を使用し、復号化時に公開鍵とは異なる秘密鍵を用いる方式の暗号化方法となります。あらかじめWebサーバがクライアントに公開鍵を渡しておき、クライアントがその公開鍵を用いて暗号化したデータをWebサーバが秘密鍵を用いて復号化する、という手順を取ることで安全な通信が可能です。
SSLではこの共通鍵暗号方式と公開鍵暗号方式の両方の方式を用いて通信を行なっています。実際のデータの通信にはは共通鍵暗号方式を用い、その共通鍵を相手に渡す際に共通鍵自体を公開鍵暗号方式で暗号化して通信することで、より安全な通信を実現しています。
暗号化通信の流れ
暗号化通信の流れは下図のようになります。
HTTPSとはHTTPによるページ表示のコンテンツデータの送受信をSSL通信で行うスキームです
URLの先頭部分がスキームであり、これをhttpsにすることでHTTPSによるWebページ表示ができます
まずクライアントからページ表示データの要求があった際に、Webサーバは公開鍵をクライアントに送信します。クライアントは秘密鍵を生成し、受信した公開鍵でその生成した共通鍵を暗号化してWebサーバに送信します。Webサーバは受信したデータを自身の持つ秘密鍵で復号化します。これによりクライアントとWebサーバ両方が秘密鍵を持つことになります。後はこの秘密鍵を用いてデータを暗号・復号しながら通信が行われます。
共通鍵で暗号化されたデータは共通鍵でしか復号化できませんので、共通鍵を持っていない第三者がデータを盗み見したとしても解読することはできません。
また共通鍵を盗もうとしても、共通鍵は公開鍵で暗号化されているため、通信相手のWebサーバにしか解錠することができません。
SSLではこのような流れで共通鍵暗号方式と公開鍵暗号方式をハイブリッドで利用して安全な通信を実現しています。
暗号化された通信データ
次にWiresharkを使ってSSL暗号化なし(HTTP)とSSL暗号化あり(HTTPS)とで通信データがどのように変化するかを確認した結果を紹介します。
Wiresharkはネットワーク上のデータ(パケット)をキャプチャして表示するツールです。
コチラでダウンロード先やWebページ表示時のパケット確認結果をまとめていますので興味があれば見てみてください。
SSL暗号化無しパケット
下記がSSL暗号化なしの状態でWebページを表示した時のパケットのキャプチャ結果です。パケットの一部にHTMLが直に埋め込まれていることが分かります。つまりSSL暗号化なし状態での通信データは他者から丸見えであり、この状態での個人情報等の大事なデータの通信は危険です。
SSL暗号化ありパケット
下記がSSL暗号化ありの状態でWebページを表示した時のパケットのキャプチャ結果です。HTMLがそのまま埋め込まれているパケットではなく、暗号データ(Encrypted Application Data)を含むパケットにより通信が行われています。暗号化されているのでデータ内容を読み取ることができません。このキャプチャ結果からも暗号化データの安全性が理解できます。
SSLサーバ証明書
共通鍵暗号方式と公開鍵暗号方式により安全な通信が行われることは前述の通りです。しかし、この安全な通信を実現するにはある前提が必要です。その前提とは「受信した公開鍵が本当に接続しようとしているWebサーバのものである」です。この前提を保証してくれるのが、SSLサーバ証明書です。
SSLサーバ証明書を用いない場合の危険性
例えば暗号化通信を開始する前に悪意ある第三者になりすましされると、その後どんなに強靭な暗号化をしたとしても大事な情報が意図しない相手に行き渡ってしまいます。
このようなことを防ぐために、SSLサーバ証明書があります。SSLサーバ証明書は公開鍵・コモンネーム・ドメインの所有者の情報等を紐づけた証明書です。この証明書は信頼できる機関である認証局によって発行されます。この証明書は電子署名と呼ばれる技術により複製等は事実上不可能です。
サブドメインを含むドメイン名です。
例えば下記の下線部分がコモンネームになります。
https://daeudaeu.com/test/
https://www.daeudaeu.com/test/
SSLサーバ証明書を用いたSSL通信
SSLサーバ証明書は、SSL通信を開始する前にWebサーバから公開鍵と一緒にクライアントに送信されます(正確には公開鍵はSSLサーバ証明書に同封されて送信されます)。
SSLサーバ証明書では公開鍵とコモンネームが紐付けられていますので、表示しようとしているWebページのURLとSSLサーバ証明書のコモンネームを比較することで、公開鍵が接続しているWebサーバのものであるかどうかを確認することができます。
もしSSLサーバ証明書のコモンネームと表示しようとしているWebページのURLとから、受信した公開鍵が接続しているWebサーバのものでないと判断した場合はWebブラウザが警告を表示します。
またサーバ証明書の電子署名をどの機関が行ったかを調べることで、そのサーバ証明書自体が信頼できるかどうかも確認できます。信頼できないと判断すれば同様にWebブラウザが警告を表示します。他にもSSLサーバ証明書の期限が切れている場合などにも警告を表示します。警告画面は例えば下図のようなものです。
公開鍵が接続先Webサーバのものである、かつ、SSLサーバ証明書の発行元が信頼できると判断できた場合のみ、共通鍵暗号方式と公開鍵暗号方式とを用いて暗号化通信が行われます。
SSLサーバ証明書により、受信した公開鍵がまさに接続しようとしていたWebサーバのものであることが保証されていますので、そこからは安全な通信を行うことができます。
ここまで説明してきたように、SSL通信ではサーバ証明書により公開鍵が信用できるかを確認することで、暗号化通信を行う前の安全を保証し、共通鍵暗号方式/公開鍵暗号方式によるデータの暗号化により、暗号化通信後の安全性を保証しているのです。
このサーバ証明書とデータ暗号化の二つがあるからこそ、SSL通信は安全な通信を実現できています。
まとめ
・SSL対応により安全な通信が可能
・SSLではサーバ証明書と暗号化により安全な通信を実現