From 55461566bd78049ecf3f3bf0d4e1564e75d958a2 Mon Sep 17 00:00:00 2001 From: wenyifan Date: Mon, 29 Jun 2026 16:38:08 +0800 Subject: [PATCH] add sni for mws and ws --- dialer/mws/dialer.go | 4 +++- dialer/mws/metadata.go | 2 ++ dialer/ws/dialer.go | 4 +++- dialer/ws/metadata.go | 2 ++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/dialer/mws/dialer.go b/dialer/mws/dialer.go index 3f777112..d6fd5355 100644 --- a/dialer/mws/dialer.go +++ b/dialer/mws/dialer.go @@ -176,7 +176,9 @@ func (d *mwsDialer) initSession(ctx context.Context, host string, conn net.Conn, urlObj := url.URL{Scheme: "ws", Host: host, Path: d.md.path} if d.tlsEnabled { urlObj.Scheme = "wss" - d.options.TLSConfig.ServerName = host + if d.md.sni != "" { + d.options.TLSConfig.ServerName = d.md.sni + } dialer.TLSClientConfig = d.options.TLSConfig dialer.NetDialTLSContext = func(ctx context.Context, network, addr string) (net.Conn, error) { client, err := util.NewUTLSWebSocketClient(conn, d.options.TLSConfig, d.md.useH2) diff --git a/dialer/mws/metadata.go b/dialer/mws/metadata.go index 7d201593..1bf89021 100644 --- a/dialer/mws/metadata.go +++ b/dialer/mws/metadata.go @@ -19,6 +19,7 @@ type metadata struct { path string useH2 bool + sni string handshakeTimeout time.Duration readHeaderTimeout time.Duration @@ -80,6 +81,7 @@ func (d *mwsDialer) parseMetadata(md mdata.Metadata) (err error) { d.md.tcpKeepaliveCount = mdutil.GetInt(md, "tcp.keepalive.count") d.md.useH2 = mdutil.GetBool(md, "h2") + d.md.sni = mdutil.GetString(md, "sni") return } diff --git a/dialer/ws/dialer.go b/dialer/ws/dialer.go index f817d54d..b22be970 100644 --- a/dialer/ws/dialer.go +++ b/dialer/ws/dialer.go @@ -114,7 +114,9 @@ func (d *wsDialer) Handshake(ctx context.Context, conn net.Conn, options ...dial urlObj := url.URL{Scheme: "ws", Host: host, Path: d.md.path} if d.tlsEnabled { urlObj.Scheme = "wss" - d.options.TLSConfig.ServerName = host + if d.md.sni != "" { + d.options.TLSConfig.ServerName = d.md.sni + } dialer.TLSClientConfig = d.options.TLSConfig dialer.NetDialTLSContext = func(ctx context.Context, network, addr string) (net.Conn, error) { client, err := util.NewUTLSWebSocketClient(conn, d.options.TLSConfig, d.md.useH2) diff --git a/dialer/ws/metadata.go b/dialer/ws/metadata.go index d0f4ebea..ffbc4f82 100644 --- a/dialer/ws/metadata.go +++ b/dialer/ws/metadata.go @@ -17,6 +17,7 @@ type metadata struct { host string path string useH2 bool + sni string handshakeTimeout time.Duration readHeaderTimeout time.Duration @@ -68,5 +69,6 @@ func (d *wsDialer) parseMetadata(md mdata.Metadata) (err error) { d.md.tcpKeepaliveCount = mdutil.GetInt(md, "tcp.keepalive.count") d.md.useH2 = mdutil.GetBool(md, "h2") + d.md.sni = mdutil.GetString(md, "sni") return }