Skip to content

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)にも比較的簡単に対応できると思います。

HTTP/3通信をプロキシしてみる

curlを用いて h2o.examp1e.net へのHTTP3通信をプロキシしてみます。

  1. HTTP/3に対応したcurlをビルドします。

    • HTTP/3 with curlを参考にcurlをビルドしてください。
    • ※ 一番上のopenssl、nghttp3、ngtcp2、curlを利用したビルド方法が安定している気がします。
  2. ビルドした curl から h2o.examp1e.net へHTTP/3通信できることを確認します。

    $ curl --http3 https://h2o.examp1e.net/index.html
    ...
    (index.htmlのHTMLデータが表示される)
    ...
  3. /etc/hosts に設定を追加し(下記)、h2o.examp1e.netへの通信をローカルホスト上で動作するPacketProxyに向けるようにします。

    127.0.0.1 h2o.examp1e.net h2o.examp1e.net
    
  4. PacketProxyを起動し下記の設定をします。

PacketProxyの設定タブ
  1. curl から h2o.examp1e.net へHTTP/3通信します

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

PacketProxyのHistoryタブ

今後の展望

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