HTTPS通信の仕組み、流れを素人が図解してみました

https通信の仕組み PC・スマホ
SponserLink

GoogleがHTTPSに対応したサイトを優先すると公表したこともあり、先日、私のサイトでもHTTPS化(SSL対応)しました。

mixhostでHTTPS化(SSL対応)するための設定手順、エラー対処

 

無事にHTTPS化は完了したのですが、そもそもHTTPSって何でしょうか?HTTPSはどういう仕組みで動作して、なぜ安全なのでしょうか?

 

というわけで、HTTPSとは何か、HTTPS通信の仕組み、流れを図にまとめてみました。

SponserLink

HTTPSとは

HTTPSとは「Hyper Text Transfer Protocol over SSL/TLS」の略です。HTTPSは、パソコンとサーバの間の通信を暗号化して安全にデータのやりとりができます

 

安全にデータをやり取りできるということから、HTTPSは楽天などのオンラインショッピングや銀行のオンラインバンキングなどで使われています。

 

ちなみに、使用しているポート番号はTCPの443です。何のこっちゃって人はスルーしてください。私の備忘用です。笑

 

HTTPS通信にはSSLサーバ証明書が必要

HTTPS通信には、SSLサーバ証明書というものが必要です。SSLサーバ証明書を使うことによって以下2つを実現しています。

  • クライアントとサーバ間の通信を暗号化する
  • サーバの正当性を証明する

どのように暗号化しているのか、どのようにサーバの正当性を証明しているのかについては、後ほどHTTPS通信の流れを図解します。

 

HTTPS対応サイトの見分け方

サイトがHTTPSに対応しているかについては、URLの先頭である程度確認できます。

urlの意味

先頭のプロトコルがHTTPSになっていれば、そのサイトはHTTPSで通信しようとしています。ただ、HTTPSで通信しようとしていても、うまくHTTPSで通信できていない場合など、URLだけではうまく判断できないものがいくつかあります。

 

URLに加えて横の鍵マークも確認が必要

httpsだけど、鍵マークが黄色

URLにhttpsのプロトコルが記載されていても、URLの左にある鍵マークが黄色の警告が表示されている場合があります。

 

これは、このページの一部の画像などがHTTPとなっているため、完全にHTTPSになっていないことを示しています。どの画像がHTTPとなっているかはブラウザの開発者ツールなどを使って、確認できます。

 

完全にHTTPSになっていた場合は緑色の鍵マークが表示されます。

https対応の鍵マーク

 

ドメインから始まっている場合はHTTP通信

http対応のurl

このように、プロトコルが記載されずにドメインからURLが始まっている場合はHTTPで通信しています。URLの横の鍵マークも斜線が入ってしまっています。

 

HTTPSで使用するポート番号は443

URLのドメイン部分の後ろには「ポート番号」と呼ばれるものがつきます。HTTPSのポート番号は443なので、以下のようなURLとなります。

ポート番号の説明

 

しかし、普段URLを入力するときはポート番号までは入力しないと思います。

 

これは「httpのポート番号は80」とか「httpsのポート番号は443」といったように、全世界で取り決められているため、わざわざ入力する必要がないのです。

 

このように全世界で取り決められているポート番号を「ウェルノウンポート」と言います。

 

HTTPS通信の流れ

ここからはHTTPSの通信の流れについて細かく見ていきたいと思います。

https通信の仕組み、流れ

 

前提知識

HTTPS通信の流れを理解するためには、公開鍵暗号方式と共通鍵暗号方式を理解しておく必要があります。

 

よくわからないという方はこちらの記事で公開鍵暗号方式と共通鍵暗号方式を理解しておいてください。

 

1.クライアントからサーバにHTTPSでの接続を要求

まずはクライアント(自分のパソコン)がサーバに対して、HTTPSでの接続を要求します。

 

HTTPSでの接続を要求するとは、「Internet ExplorerやFirefoxなどのブラウザで、HTTPSのURLを入力する」ことです。

 

また、このタイミングでクライアントは自身が通信可能な暗号化方式も連絡します。この後の処理で、サーバはクライアントから受け取った暗号化方式から実際に使用する暗号化方式を選択して、返送します。

 

なお、クライアントがサーバに連絡する「自身が通信可能な暗号化方式」とは、「SSLやTLSなど」のことです。SSL3.0やTLS1.2などをサーバに連絡します。

SSLやTLSについては「SSLやTLSの違いとは?SSL/TLSの歴史と最新動向」をご覧ください。

 

2.サーバがサーバ証明書と公開鍵を返送

クライアントからのHTTPS接続要求に対し、サーバはSSLサーバ証明書と公開鍵を返送します。

 

3.ルート証明書でサーバ証明書を検証

続いて、クライアントはブラウザのルート証明書でサーバ証明書を検証します。これにより通信先のサーバが不正なサーバでないことを確認します

 

ルート証明書はあらかじめインストールされている

ルート証明書とは、信頼される認証局としてあらかじめインストールされている証明書のことです。クライアント(端末)が工場から出荷される時にあわせてルート証明書がインストールされています。

 

なお、ルート証明書の更新方法はブラウザによって異なります。Firefoxの場合はブラウザのバージョンアップ時に自動でルート証明書を更新します。

参考 いまさら聞けない、SSLサーバ証明書とルート証明書の関係|シマンテック

 

4.プリマスタシークレットを生成し、サーバの公開鍵で暗号化

次に、クライアントがHTTPS通信に使用する「プリマスタシークレット」を生成します。続けて、2の処理で受け取った「サーバの公開鍵」を使ってプリマスタシークレットを暗号化します。

 

プリマスタシークレット」とはHTTPS通信に使用する共通鍵を生成する基となる乱数のことです。

処理の流れとしては、「公開鍵暗号方式を用いて共通鍵をサーバに送信する」というイメージです。

 

5.暗号化したプリマスタシークレットを送付

クライアントは暗号化したプリマスタシークレットをサーバに送付します。

 

6.サーバの秘密鍵でプリマスタシークレットを復号

サーバは暗号化されたプリマスタシークレットを受け取ると、自身の公開鍵に対応する秘密鍵でプリマスタシークレットを復号します。

 

7.プリマスタシークレットからHTTPS通信用の共通鍵を作成

クライアントとサーバの双方で、プリマスタシークレットからHTTPS通信用の共通鍵を作成します。

この結果、双方で共通鍵を保持することができました。

 

これ以降はこのHTTPS通信用の共通鍵を使って、HTTPS通信を行います。

 

HTTPSに関する豆知識

 

SSLサーバ証明書とSSLクライアント証明書は全くの別物

HTTPSで使用するのはSSLサーバ証明書ですが、SSLサーバ証明書と同じような名前で、SSLクライアント証明書というものがあります。

 

SSLクライアント証明書とは、端末にインストールされる証明書で、証明書がインストールされた端末しかアクセスさせないといったサービスで使用されます。

 

SSLクライアント証明書はSSLサーバ証明書と比べると使用される機会が少ないです。一般的に、SSL証明書と言われたらSSLサーバ証明書のことを指していると考えていいと思います。

参考 クライアント証明書とは?|GlobalSign

 

本当はSSLではなく、TLS

SSLサーバ証明書など、SSLという言葉は普通に使用されていますが、実はSSLは少し前の技術です。最近ではSSLが改良されてTLSという技術となっています。

 

SSLとTLSの違いや歴史についてはこちらの記事でまとめています。

SSLとTLSの違いとは?SSL/TLSの歴史と最新動向

 

2014年10月にGoogleの技術者がSSLのバージョン3.0に深刻な脆弱性が見つかったことを公表しました。このことにより、SSL3.0を使用することが禁止され、本格的にTLSのみでの運用となっています。

 

ただし、世間一般的にSSLという言葉が普及してしまっているため、実際に使用しているのがTLSであっても、「SSL」や「SSL/TLS」と表記することが多いです。ちなみに、SSLとは「Secure Sockets Layer」の略で、TLSとは「Transport Layer Security」の略です。

参考 SSLとTLSの違いと脆弱性|シマンテック

 

まとめ

HTTPS通信の仕組みについてまとめました。ブラウザにHTTPSのURLを入力するだけで、こんなに多くの処理が行われているとは思っていませんでした。

 

私はこのHTTPSの仕組みを理解するのに、かなり時間を要してしまいましたが、私のように「HTTPSって何?」と思っている方の参考になれば幸いです。

コメント