LoginSignup
2
1

quiclyを使ってC++でHTTP/3サーバをお試し実装

Last updated at Posted at 2023-12-10

作ったもの

HTTP/3について

以下の資料が参考になります。多分HTTP/2をそれなりに理解していたほうがいいと思います。

実装について

cli.cを参考に実装しています。QPACKについては実装していません。

試験方法

ビルド方法

依存ライブラリの以下部分を修正しないとC++だとエラーになります。

  • quicly/deps/picotls/t/util.h:306
// uint8_t *へのキャストを追加する
uint8_t *info = (uint8_t *) malloc(info_prefix.len + end - (src - 4));
  • quicly/deps/picotls/t/util.h:350
// uint8_t *へのキャストを追加する
ech.config_list.base = (uint8_t *) malloc(65536);

試験ツール

とりあえずcloudflareのツールが使えるようなので、それで試します。--wire-version 1を指定しないとうまくいかないです。

git clone --recursive https://github.com/cloudflare/quiche
cd quiche/
cargo build
./target/debug/quiche-client --http-version HTTP/3 --wire-version 1  --no-verify http://127.0.0.1:4433/hoge1.html http://127.0.0.1:4433/hoge2.html

パケットキャプチャしてみる

上記のquiche-clientはSSLKEYLOGFILE変数に指定されたファイルに秘密鍵を出力するので、このファイルを使えば復号化することができます。

SSLKEYLOGFILE=hoge.txt ./target/debug/quiche-client  --wire-version 1  --no-verify http://127.0.0.1:4433/hoge1.html http://127.0.0.1:4433/hoge2.html

このhoge.txtをwiresharkの「設定→Protocols→TLS」の「(Pre)-Master-Secret log filename」に指定すればOK。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1