-
Notifications
You must be signed in to change notification settings - Fork 37
PacketProxyを利用したQUIC・HTTP 3通信のプロキシ機能
funa-tk edited this page Mar 6, 2023
·
1 revision
- HTTP通信を高速化するため、QUICおよびHTTP/3という通信プロトコルが標準化され、QUICがRFC9000として2021年5月に公開、HTTP/3についてもRFC9114として2022年6月に公開されました。今後、あらゆるプログラムでQUICとHTTP/3は利用されていくと思います。
- ご存知かもしれませんが、Google Chromeは既にGoogleのサーバとの通信でHTTP/3通信をしています!
- 脆弱性診断担当者や、開発者をサポートするため、PacketProxyにフルスクラッチでQUICとHTTP/3プロトコルの基本的な機能を実装し、公開しました。
- 現在のところ、curlとpicoquicによるQUIC・HTTP/3通信をPacketProxyでプロキシできることが確認できています。
- PacketProxyのQUIC・HTTP/3プロキシ機能は拡張しやすい形で実装されているため、QUIC上に乗る新しいプロトコルや、HTTP/3を応用した新しいプロトコル(例:gRPC over HTTP/3)にも比較的簡単に対応できると思います。
curlを用いて h2o.examp1e.net へのHTTP3通信をプロキシしてみます。
-
HTTP/3に対応したcurlをビルドします。
- HTTP/3 with curlを参考にcurlをビルドしてください。
- ※ 一番上のopenssl、nghttp3、ngtcp2、curlを利用したビルド方法が安定している気がします。
-
ビルドした curl から h2o.examp1e.net へHTTP/3通信できることを確認します。
$ curl --http3 https://h2o.examp1e.net/index.html ... (index.htmlのHTMLデータが表示される) ...
-
/etc/hosts に設定を追加し(下記)、h2o.examp1e.netへの通信をローカルホスト上で動作するPacketProxyに向けるようにします。
127.0.0.1 h2o.examp1e.net h2o.examp1e.net
-
PacketProxyを起動し下記の設定をします。

-
curl から h2o.examp1e.net へHTTP/3通信します
$ curl -k --http3 https://h2o.examp1e.net/index.html ... (index.htmlのHTMLデータが表示される) ...
-
-k
オプションは、証明書の検証を無視するオプションです。
-
-
PacketProxyの History タブで通信を取得できていることを確認する

- 今後は、Google Chromeの QUIC・HTTP/3通信をプロキシできるようにすることを目指します。
- その後、gRPC over HTTP/3等のQUICやHTTP/3を応用したプロトコルのプロキシ機能の開発をしていく予定です。