コンテンツにスキップ

TLS 1.3 ハンドシェイク

QUIC は TLS 1.3 を自身のパケットの中で運びます。 このページでは、自己署名の識別情報(CA に頼らず自分の鍵で署名した証明書を使う構成)でサーバーを動かします。 クライアントはハンドシェイク(使う暗号方式や鍵を取り決めるやり取り)を完了させ、合意した内容を表示します。

コード

main.c
#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;
}

実行結果

Terminal window
$ ./tls-handshake --port 4433
conn closed by peer (CONNECTION_CLOSE)
Terminal window
$ probe tls 127.0.0.1:4433
version: TLS 1.3
cipher: TLS_AES_128_GCM_SHA256
alpn: h3
  • wired_srvdriver_parse(argc, argv, &opt) は、コマンドラインから --port とドライバーのフラグ(--workers、--cores など)を読みます。
  • wired_srvdriver_run(&id, h, obs, &opt) は、選ばれたサーバードライバーを動かします。
  • wired_srvboot_id はサーバーの識別情報です。 chain を設定しないと、サーバーは cert_seed から自己署名証明書を作ります。
  • このページではハンドラーは呼ばれません。 クライアントがハンドシェイクの直後にコネクションを閉じるためです。