Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Goで分解するHTTPS通信

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers. →

 Goで分解するHTTPS通信

Avatar for yingtian

yingtian

July 11, 2026

Other Decks in Programming

Transcript

  1. HTTPS 通信フロー: CONNECT からTLS 終端まで Client Proxy Origin Server 1.

    CONNECT example.com:443 2. Proxy -> Client: HTTP/1.1 200 Connection Established 3. TLS Handshake (Client ↔ Proxy) 4. 動的証明書を生成 example.com 用証明書 ローカルCA で署名 CA TLS 終端 5. TLS Handshake (Proxy ↔ Origin) 6. HTTP Request / Response Client はローカルCA を信頼する必要がある Proxy 内部ではTLS 接続が2 本ある
  2. TLSを2本張る 03 Client -- TLS --> Proxy -- TLS -->

    Origin Text クライアント側: tls.Server(clientConn, ...) 上流サーバー側: tls.Client(serverConn, ...) 中身のバイト列: io.Copy で双方向に転送
  3. まとめ CONNECT はTCP トンネル開始の合図 Hijack するとHTTP 抽象から TCP ストリームへ降りられる TLS

    終端プロキシは、TLS 接続を左右に 2 本持つ 証明書検証は「誰が署名したか」と 「ホスト名が合うか」を見ている