HTTPSとは

えいちてぃーてぃーぴーえす

HTTPをTLSで保護した通信。やり取りの暗号化、改ざんの検出、サーバ証明書によるサーバの認証を行う。URLは https:// で始まり、既定のポート番号は443。リクエストや応答の形はHTTPと同じで、その下にTLSの層が入る。

「HTTPS」は、6分野の12問の練習問題に出てきます(ネットワークの基礎, Web技術の基礎, 情報セキュリティの基礎など)。

この用語の分野: Web技術の基礎

接続の流れ

ブラウザは、まずサーバとTCPの接続を作り(HTTP/3ではQUIC)、続いてTLSのハンドシェイクを行います。ブラウザは使える暗号の方式と鍵の交換に使う値、接続したいサーバの名前(SNI)を送り、サーバは自分の証明書と鍵の交換の値を返します。両者はECDHEなどの鍵の交換で、通信のたびに新しい共通の鍵を作り、ブラウザはサーバの証明書を確かめます。その後のHTTPのリクエストと応答は、AES-GCMなどの共通鍵暗号で暗号化と改ざんの検出をしながら送られます。TLS 1.3では、ハンドシェイクは1往復で済みます。

証明書でサーバを確かめる

サーバ証明書は、ドメイン名と公開鍵の組を、認証局(CA)がデジタル署名で保証したものです。ブラウザは、証明書が信頼するルート認証局までの署名の連鎖でつながっているか、有効期限内か、URLのホスト名と一致するか、失効していないかを確かめます。これで、途中で通信を横取りして本物のサーバになりすます中間者攻撃を防ぎます。確かめられないときは、ブラウザが警告を出して接続を止めます。

守れるものと守れないもの

HTTPSは、ページの内容、URLのパスとクエリ、ヘッダ、Cookieを、途中での盗聴と改ざんから守ります。一方、サーバのIPアドレス、通信の量や時刻は見えますし、接続先のドメイン名も、DNSの問い合わせやSNIから分かることがあります。また、HTTPSは通信路を守るだけで、サイトの運営者が信頼できることは保証しません。偽のサイトも証明書を取得してHTTPSにできるためです。HTTPへの格下げを防ぐHSTSや、HTTPSのときだけCookieを送るSecure属性などと組み合わせて使います。

HTTPSの練習問題に挑戦

Kubernetesのクラスタで、1つのホスト名に届いたHTTPSの要求のうち、パスが /api で始まるものは api のServiceへ、それ以外は web のServiceへ振り分けたい。この振り分けの規則を定めるのに適したリソースはどれか。

  1. AIngress
  2. BReplicaSet
  3. Ctype: ClusterIP のService
答えと解説を見る

正解:A. Ingress

Ingressは、ホスト名やURLのパスに応じて、クラスタの外から来たHTTPやHTTPSの要求を各Serviceに振り分ける規則を定めるリソースで、TLSの終端もここで設定できます。実際に要求を受けて振り分けるのは、クラスタに導入したIngressコントローラ(リバースプロキシとして動くもの)です。type: ClusterIP のServiceはクラスタの中からだけ使える接続先で、パスで振り分ける機能はもちません。ReplicaSetはPodの数を保つためのもので、通信の振り分けとは関係しません。

RTT(往復の時間)が100 msのWebサーバに、HTTPS(TCPの上のTLS 1.3)で新しく接続し、最初のリクエストを送って応答を受け取り始めるまでにかかる時間に最も近いものはどれか。DNSの名前解決は済んでおり、サーバの処理時間とデータの転送時間は無視する。

  1. A約100 ms
  2. B約300 ms
  3. C約200 ms
答えと解説を見る

正解:B. 約300 ms

まずTCPの3ウェイハンドシェイクで1往復かかります(クライアントは最後のACKと一緒にTLSの最初のメッセージを送れます)。次にTLS 1.3のハンドシェイクで1往復、その後にHTTPのリクエストと応答で1往復かかり、合計で3往復、3 × 100 = 300 msです。TLS 1.2では鍵の交換に2往復かかるため、4往復の400 msになります。この待ち時間は距離で決まるRTTの回数で決まるので、回線の帯域を増やしても短くなりません。HTTP/3で使われるQUICは、トランスポートと暗号のハンドシェイクを1往復にまとめ、再接続のときには最初の往復でデータを送る方法(0-RTT)も用意しています。

よくある質問

HTTPとHTTPSの違いは何ですか?

HTTPSは、HTTPのやり取りをTLSで暗号化し、改ざんの検出とサーバの認証を加えたものです。リクエストや応答の形は同じで、既定のポート番号はHTTPが80、HTTPSが443です。HTTPでは、途中の機器から内容を読まれたり書き換えられたりするおそれがあります。

HTTPSのサイトなら安全だといえますか?

通信の途中で盗み見られたり書き換えられたりしないことと、そのドメイン名のサーバにつながっていることは確かめられます。しかし、サイトそのものが本物か、悪意がないかまでは保証しません。フィッシングのサイトもHTTPSを使えるので、ドメイン名をよく確かめる必要があります。

HTTPSの暗号化には公開鍵暗号と共通鍵暗号のどちらを使いますか?

両方を使い分けます。ハンドシェイクでは、鍵の交換と証明書による認証に公開鍵暗号の技術を使い、実際のデータは、そこで作った鍵を使って処理の速い共通鍵暗号で暗号化します。

解説の中の「HTTPS」

「HTTPS」が出てくる問題(12問)

  1. Kubernetesのクラスタで、1つのホスト名に届いたHTTPSの要求のうち、パスが /api で始まるものは api のServiceへ、それ以外は web のServiceへ振り分けたい。この振り分けの規則を定めるのに適したリソースはどれか。
  2. RTT(往復の時間)が100 msのWebサーバに、HTTPS(TCPの上のTLS 1.3)で新しく接続し、最初のリクエストを送って応答を受け取り始めるまでにかかる時間に最も近いものはどれか。DNSの名前解決は済んでおり、サーバの処理時間とデータの転送時間は無視する。
  3. HTTPS(HTTPをTLSで保護した通信)で守られることとして正しいものはどれか。
  4. NAPTを行うルータ(外側のグローバルアドレスは 198.51.100.7)の内側にある端末A(192.168.1.10)が、送信元ポート50000でWebサーバ 203.0.113.5 の443番ポートへ接続した。ルータは送信元を 198.51.100.7 のポート61000に変換した。Webサーバが返す応答パケットの宛先はどれか。
  5. プロトコルと、そのサーバが標準で使うポート番号の組み合わせとして正しいものはどれか。
  6. 上のヘッダで設定されたCookieについての説明として、正しいものはどれか。
  7. Service Workerの説明として、正しいものはどれか。
  8. リバースプロキシの説明として、正しいものはどれか。
  9. 掲示板のWebアプリケーションで、利用者が投稿した文章の中のスクリプトが、ほかの閲覧者のブラウザで実行されてしまう脆弱性があった。この脆弱性の名前と、根本的な対策の組み合わせとして正しいものはどれか。
  10. Webアプリケーションで、ログインの前と後で同じセッションIDを使い続けていると、攻撃者があらかじめ用意したセッションIDを利用者に使わせ、利用者がログインした後にそのIDで利用者になりすますおそれがある。この攻撃への対策として最も適切なものはどれか。
  11. 1 GiB = 2³⁰ バイト、1 EiB = 2⁶⁰ バイトとする。ブロック長が64ビットのブロック暗号(3DESなど)をCBCモードで使い、1つの鍵で大量のデータを暗号化する。暗号文ブロックをランダムな64ビットの値とみなすとき、誕生日のパラドックスにより、同じ暗号文ブロックの組が現れる確率が無視できなくなるデータ量の目安はどれか。
  12. WAF(Webアプリケーションファイアウォール)の説明として、正しいものはどれか。

Web技術の基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

関連する用語

HTTP URL TLS Cookie IPアドレス クロスサイトスクリプティング(XSS) リバースプロキシ DNS ポート番号 Kubernetes

用語集の一覧へ