この記事が気に入ったらシェアしてください

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

この記事が気に入ったらシェアしてください

https通信の仕組み

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

mixhostでHTTPS化(SSL対応)するための設定手順、エラー対処
先日、ロリポップからmixhostへの乗り換えを行いました。乗り換え先のmixhostでは無料でサイトをSSL対応にすることができま...

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

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

スポンサーリンク
広告

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通信の流れ

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

https通信の仕組み、流れ

前提知識

HTTPS通信の流れを理解するためには、公開鍵暗号方式と共通鍵暗号方式を理解しておく必要があります。よくわからないという方はこちらの記事で公開鍵暗号方式と共通鍵暗号方式を理解しておいてください。

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

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

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

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

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

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の歴史と最新動向
本サイトのHTTPS化に伴い、HTTPSの通信の仕組みについてご紹介しました。この記事の中で「最新の技術はS...

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

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

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

スポンサーリンク
広告
広告

この記事が気に入ったらシェアしてください

もし良かったらフォローしてください