HTTPS

 

HTTPSとは

HTTPS(Hypertext Transfer Protocol )とは、WebサーバとWebブラウザの間で情報をやりとりするために使われる通信規則(プロトコル)の一つ。
HTTP通信を暗号化し、より安全に通信できるようにしたプロトコルのこと。
 
▼ 「HTTP」についての詳しい記事はこちら
 

HTTPとHTTPSの違い

HTTPとHTTPSの主な違いは、通信の暗号化の有無のみ。
HTTPSでは「SSL/TLS」という暗号技術(プロトコル)を使って通信を暗号化している。
暗号化実現のためにサーバからクライアントへ「サーバ証明書」が送信される。
 
 

SSL/TLSとは

まず、TLS (Transport Layer Security)とは、インターネット上のデータを暗号化するためのプロトコルのこと。
 
TLSの古いバージョンはSSL(Secure Socket Layer)と呼ばれていたが、管理組織が移行した際にTLSという名称に変更された。 SSLという用語の方が馴染み深い事もあり、現在もTLSのことを指す時に「SSL/TLS」と表現されることが多い。
 
プロトコルバージョンの移り変わりは、以下の表の通り。
プロトコルバージョンリリース年
SSL1.0リリース無し
SSL2.01994年
SSL3.01995年
TLS1.01999年
TLS1.12006年
TLS1.22008年
TSL1.32018年

SSL/TLSの役割と暗号化の効果

SSL/TLSの暗号技術により、HTTPS通信では以下3つの機能で安全な通信を実現している。
 
  • なりすまし防止 サーバ証明書は認証局と呼ばれる第三者機関から発行され、クライアント側で「認証局から認められた証明書か?」を確認する。 そのため、他者によってなりすまされる事を防止できる。
 
  • 盗聴防止 通信データは暗号化して送信し、通信している二者しか知らない鍵でのみ復号可能。 そのため、第三者は通信中のデータを取得しても内容が分からない。
 
  • 改ざんの検出 通信データに加え、そのデータのハッシュ値である「デジタル署名」を合わせて送る。
    受信者側でデジタル署名を検証することで、通信経路でデータ改ざんされた場合でも検知できる。

HTTPSの通信フロー

HTTPSの通信フロー(概要)

HTTPSの通信フローの概要は以下の通り。
① クライアントはHTTPSでWebサーバへアクセスする。
② Webサーバはサーバ証明書を送る
③ クライアントはサーバ証明書が認証局から認められた正当な証明書かを確認し、サーバ証明書に含まれるWebサーバの公開鍵を取得する。
④ クライアントはデータ暗号化用の共通鍵を作成する。
⑤ クライアントは作成した共通鍵を③で取得したWebサーバの公開鍵で暗号化して送信する。
⑥ Webサーバは自身の秘密鍵でデータを復号し、共通鍵を取得する。
⑦ 通信データを共通鍵で暗号化/復号することで送受信する。データと共にデジタル署名を送ることで、通信時に第三者がデータ改ざんしていないかを検証する。
 
 
 

HTTPSの通信フロー(詳細)

HTTPS通信全体のフローを全て細かく記載した図を以下に示す。
HTTPSの通信フローではHTTP通信とは異なり「TLSハンドシェイク」のフローがあるのが特徴となる。
 
 
  • TCP接続(3Wayハンドシェイク) HTTPS通信の前にTCPプロトコルで接続を確立する。
 
  • TLSハンドシェイク
    サーバからクライアントへサーバ証明書を送信し、クライアント側で正当な証明書かを検証する。 検証完了後、後続の通信を暗号化するために利用する鍵情報などを共有する。
 
  • HTTPS通信 実際にクライアントとWebサーバでデータを送受信する。 送信側は暗号化されたデータに加え、データのハッシュ値である「デジタル署名」を送る。 受信側はデータを復号した後、そのデータが通信中に改ざんされていないかを検証する。
 
  • 通信切断 データの送受信が完了後、通信を切断するためのやりとりを行う。