【ネットワーク】HTTPSとは?SSL/TLSで通信を暗号化する仕組み

ネットワーク

こんにちは、かつコーチです。

前回はHTTPメソッド(GET・POST・PUT・DELETE)の使い分けを解説しました。

今回は、URLの先頭が「http://」ではなく「https://」になっている、あの「s」の正体を掘り下げます。

ブラウザのアドレスバーに表示される鍵マークの意味、そしてSSL/TLSという言葉が指す仕組みまで、順を追って理解していきましょう。

HTTPSとは?

封筒に鍵をかけて送る仕組み

以前の記事で、HTTPは「手紙のやり取り」に例えられると説明しました。

ただし通常のHTTPは、封筒に入れずにはがきのまま手紙を送っているようなものです。

内容を誰でも読めてしまいますし、途中で書き換えられても気づけません。

HTTPS(HTTP Secure)とは、この手紙を封筒に入れ、さらに鍵をかけてから送る仕組みのことです。

封筒に鍵をかける役割を担っているのが、SSL/TLS(Secure Sockets Layer / Transport Layer Security、通信を暗号化するための技術)です。

現在主流なのはTLSで、SSLは古い呼び方ですが、慣習的に「SSL/TLS」とまとめて呼ばれることが多くなっています。

なぜHTTPSが必要なのか

HTTPのまま通信すると、次のようなリスクがあります。

  • 通信内容を第三者に盗み見られる(盗聴)
  • 通信内容を途中で書き換えられる(改ざん)
  • 偽サイトに誘導されても気づけない(なりすまし)

特にログインフォームやクレジットカード情報を扱うサイトでは、封筒に鍵をかけずに送るようなHTTP通信は許容できません。

現在はChromeなどの主要ブラウザが、HTTPのままのサイトに「保護されていない通信」という警告を表示するようになりました。

さらにGoogleは検索順位を決める要素の一つにHTTPS化を含めているため、SEOの観点でもHTTPS化はもはや必須の対応です。

SSL/TLSによる暗号化の仕組み

公開鍵と共通鍵、2種類の鍵の役割分担

封筒に鍵をかけると言っても、実際には2種類の鍵が組み合わさっています。

公開鍵暗号方式は、誰でも使える「鍵をかける専用の鍵(公開鍵)」と、持ち主だけが持つ「開ける専用の鍵(秘密鍵)」の組み合わせです。

共通鍵暗号方式は、送信者と受信者が同じ1本の鍵を共有し、その鍵で施錠と開錠を両方行う方式です。

共通鍵暗号は処理が速い一方、鍵そのものを安全に相手へ渡す方法が課題になります。

そこでTLSでは、最初に公開鍵暗号で共通鍵を安全にやり取りし、その後の実際の通信は高速な共通鍵暗号で行う、という2段構えの仕組みを採用しています。

TLSハンドシェイクの流れ

通信の最初に行われる、鍵の受け渡しと確認の手順をTLSハンドシェイクと呼びます。

大まかな流れは次のとおりです。

  1. クライアントが「これから暗号化通信をしたい」とサーバーに伝える
  2. サーバーが自分の身元を証明するSSL証明書(運営者情報や公開鍵が記載された電子的な証明書)を送る
  3. クライアントが証明書を検証し、共通鍵の元になる情報を公開鍵で暗号化して送る
  4. 双方が共通鍵を持った状態になり、以降は共通鍵で暗号化した通信を行う

このやり取りが、ページを開くたびに一瞬で行われています。

よくあるつまずきポイント・エラー対処

証明書エラーとMixed Content

以前、既存サイトをHTTPからHTTPS化する作業を担当した際、切り替え直後にブラウザのコンソールに警告が大量に出て焦ったことがあります。

原因は、CSSやJavaScriptの中で画像パスをhttp://example.com/img.pngのように絶対パスでhttp指定していたことでした。

ページ自体はHTTPSで暗号化されているのに、一部の画像だけHTTPで読み込もうとするため、ブラウザがMixed Content(保護された通信の中に保護されていない通信が混在する状態)として警告を出していたのです。

<!-- ❌Before:http固定で書かれた画像パス -->
<img src="http://example.com/img/logo.png">

<!-- ✅After:httpsに統一するか、プロトコル省略で記述 -->
<img src="https://example.com/img/logo.png">
<img src="//example.com/img/logo.png">

このときは、サイト内の画像・CSS・JSのパスをすべてhttps固定、もしくはプロトコル省略の記述に置き換えて解決しました。

証明書自体のエラー(期限切れ、ドメイン不一致など)が出ている場合は、Let’s Encryptなどの証明書発行サービスの更新設定を見直すのが第一歩です。

応用・一歩先の使い方

HTTP/2・常時HTTPS化との関係

現在広く使われているHTTP/2(1本の接続で複数のリクエストを効率よく処理できる新しいHTTPの規格)は、事実上HTTPS上でしか動作しません。

つまりHTTPS化は、セキュリティ対策であると同時に、通信を高速化するための前提条件にもなっています。

サイト全体を常にHTTPSで提供する常時HTTPS化が現在の標準で、HTTP接続をHTTPSへ自動転送する設定は、Webサーバー構築の基本作業の一つです。

Let’s EncryptのようなDV証明書を使えば、無料かつ自動更新の仕組みで常時HTTPS化を実現できます。

まとめ

この記事のポイント

  • HTTPSは「封筒に鍵をかけて送る」ように、HTTP通信をSSL/TLSで暗号化する仕組み
  • 公開鍵暗号で共通鍵を安全に受け渡し、以降は共通鍵暗号で高速に通信する
  • Mixed Contentは、HTTPS化したのに一部リソースがHTTPのままのときに発生する
  • HTTP/2の利用や検索順位の観点からも、常時HTTPS化は必須の対応

次に読むべき記事

  • OSI参照モデルとは?通信を7つの階層で理解する
  • TCPとUDPの違い:確実さとスピードのトレードオフ

タグ: ネットワーク, 中級者向け, HTTP

タイトルとURLをコピーしました