TLS 1.3 ハンドシェイク
QUIC は TLS 1.3 を自身のパケットの中で運びます。 このページでは、自己署名の識別情報(CA に頼らず自分の鍵で署名した証明書を使う構成)でサーバーを動かします。 クライアントはハンドシェイク(使う暗号方式や鍵を取り決めるやり取り)を完了させ、合意した内容を表示します。
コード
#define WIRED_MAIN#include "wired.h"
/* No HTTP traffic is expected: the client only completes the handshake. */static int on_request( void* ctx, const wired_h3reqdrive_req* req, u64 offset, wired_obuf* body_out, const char** content_type, int* more, u64* total_size) { (void)ctx; (void)req; (void)offset; (void)body_out; (void)content_type; (void)more; (void)total_size; return 0;}
int wired_main(int argc, char** argv) { /* Fixed demo identity (self-signed certificate; never for production). */ static wired_srvboot_demo_keys keys; wired_srvboot_id id; wired_srvboot_demo(&id, &keys, 0x50, "guide-tl");
/* --port and the driver flags (--workers, --cores, ...) come from argv. */ wired_srvdriver_opt opt; if (!wired_srvdriver_parse(argc, argv, &opt)) return 1; wired_srvrun_handler h = {.cb = on_request}; wired_srvrun_obs obs = {0}; return wired_srvdriver_run(&id, h, obs, &opt) ? 0 : 1;}実行結果
$ ./tls-handshake --port 4433conn closed by peer (CONNECTION_CLOSE)$ probe tls 127.0.0.1:4433version: TLS 1.3cipher: TLS_AES_128_GCM_SHA256alpn: h3wired_srvdriver_parse(argc, argv, &opt)は、コマンドラインから--portとドライバーのフラグ(--workers、--coresなど)を読みます。wired_srvdriver_run(&id, h, obs, &opt)は、選ばれたサーバードライバーを動かします。wired_srvboot_idはサーバーの識別情報です。chainを設定しないと、サーバーはcert_seedから自己署名証明書を作ります。- このページではハンドラーは呼ばれません。 クライアントがハンドシェイクの直後にコネクションを閉じるためです。