Closed3

HTTPプロトコルについて調べてみる

ebi_yuebi_yu

そもそもHTTPとは

Hypertext Transfer Protocolの略。
もとはWebページを閲覧するためにhtml(HyperText Markup Language)を転送するためのプロトコル。
現在は、画像データ/API呼び出し/認可など、様々なプロトコルに使われる。

HTTPプロトコルにはいくつかバージョンがあり、HTTP/1.1、HTTP/2が主流(最近、HTTP/3が登場したが対応してないサービスも多い)

Webシステムに使用するプロトコルについて

下記ページが詳しい。

https://www.itmanage.co.jp/column/osi-reference-model/

https/httpはアプリケーション層の通信プロトコル

ユーザがwebページにアクセスすると

1. リクエストがhttpsプロトコルでとぶ
2. TCP/UDPプロトコルに変換
3. IPプロトコルに変換
4. Ethernetプロトコルに変換され、サービスが動いているサーバに届く。

サービスが動いているサーバ → ユーザへのリスポンスの場合は逆

TCPコネクションの確立

HTTP/HTTPs通信が確立する前に、TCPコネクションを確立する必要がある
(通信が届いているかの信頼度をあげるため)

https://qiita.com/lymansouka2017/items/2d2e78a37b9f1f8fb3a0

ebi_yuebi_yu

HTTPSとは

HTTP通信を暗号化した通信プロトコル。
HTTP/2、HTTP/3ではhttpsが必須。

前提: 秘密鍵/公開鍵について

公開鍵

データを暗号化するための鍵。
最初の通信の際にブラウザに渡して、HTTP通信で送るデータなどを暗号化してもらう

秘密鍵

公開鍵で暗号化されたデータを復号するために使用する鍵。
公開鍵で暗号化されたデータは秘密鍵でしか復号できない。
基本的に外部に公開しないで、サービスを提供するサーバのみが持っている

https://it-trend.jp/encryption/article/64-0089

前提: サーバ証明書について

公開鍵を含む電子証明書。
サーバ証明書が信頼できることは中間 or ルート証明書で確認する。
(中間 or ルート証明書証明書に含まれる公開鍵によってサーバ証明書を復号化できるか検証する)

最終的には信頼された機関によって発行されたルート証明書によって、証明書の信頼性が
確認される
ルート証明書は、標準のブラウザでデフォルトで組み込まれている。

https://qiita.com/miyuki_samitani/items/35941e2389b8f62625ad

HTTPSの暗号化方式

1. TCPコネクションの確立

前項を参照

2. サーバ証明書(公開鍵)の受信

サーバ証明書(公開鍵)を含むがサーバから送られてくる。
サーバ証明書をルート証明書に含まれる秘密鍵で復号し、サーバの公開鍵を取得する

3. 共通鍵の公開鍵での暗号化

公開鍵でブラウザ側で生成した共通鍵を暗号化する。
暗号した共通鍵をサーバ側に送信する。
サーバ側でサーバの秘密鍵を使って、送られてきた共通鍵を取り出す。

4. 共通鍵を使用した暗号化通信の確立

以後のサーバとブラウザの通信は共通鍵によって暗号化されたデータを送り合う

ebi_yuebi_yu

HTTP/1.1

  • 登場時期: 1997年
  • 特徴:
    • 接続ごとに1つのリクエスト/レスポンスのみ処理。
    • ヘッダ情報がプレーンテキスト。
    • パイプライン処理により、複数のリクエストを順番に処理可能だが、先行するリクエストのレスポンスが完了するまで後続のレスポンスは待機(ヘッド・オブ・ライン・ブロッキング)。

HTTP/2

  • 登場時期: 2015年
  • 特徴:
    • 同一接続上での多重化により、複数のリクエスト/レスポンスが並行して処理可能。
    • ヘッダ情報の圧縮によりデータ転送量の削減。
    • サーバプッシュ機能により、クライアントの要求前にサーバからリソースを送信可能。
    • バイナリ形式での通信により、パフォーマンス向上。

HTTP/3

  • 登場時期: 2020年
  • 特徴:
    • UDPベースの新しいトランスポートプロトコルQUICを使用。
    • 接続の確立が高速。
    • ヘッド・オブ・ライン・ブロッキングの更なる削減。
    • パケットの暗号化が標準。

https://qiita.com/zumax/items/7f0e93c986df5da642ec

HTTP/3の対応状況について

ブラウザ/サービスが立っているサーバ(webサーバ)どちらでもHTTP/3に対応している必要がある 。
主要ブラウザはHTTP/3 対応済みっぽい

https://caniuse.com/?search=http3

サーバサービスの対応はサービスによる

nginx

https://zenn.dev/catatsuy/articles/71609eff5611e4

cloud front

https://aws.amazon.com/jp/about-aws/whats-new/2022/08/amazon-cloudfront-supports-http-3-quic/

kong

サポートされてない?
https://github.com/Kong/kong/discussions/8983

このスクラップは4ヶ月前にクローズされました