From c9ae6dcc03619898392a0b8db5b839dfd3b4aafe Mon Sep 17 00:00:00 2001 From: Alex X Date: Wed, 15 Nov 2023 15:59:59 +0300 Subject: [PATCH] Fix https source, again --- pkg/tcp/request.go | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/pkg/tcp/request.go b/pkg/tcp/request.go index 8513feae..dda32ce8 100644 --- a/pkg/tcp/request.go +++ b/pkg/tcp/request.go @@ -22,8 +22,6 @@ func Do(req *http.Request) (*http.Response, error) { case "https": if hostname := req.URL.Hostname(); IsIP(hostname) { secure = &tls.Config{InsecureSkipVerify: true} - } else { - secure = &tls.Config{ServerName: hostname} } } @@ -48,11 +46,21 @@ func Do(req *http.Request) (*http.Response, error) { if err != nil { return nil, err } - secure := ctx.Value(connKey).(*tls.Config) - tlsConn := tls.Client(conn, secure) + + var conf *tls.Config + if v, ok := ctx.Value(secureKey).(*tls.Config); ok { + conf = v + } else if host, _, err := net.SplitHostPort(addr); err != nil { + conf = &tls.Config{ServerName: addr} + } else { + conf = &tls.Config{ServerName: host} + } + + tlsConn := tls.Client(conn, conf) if err = tlsConn.Handshake(); err != nil { return nil, err } + if pconn, ok := ctx.Value(connKey).(*net.Conn); ok { *pconn = tlsConn } @@ -128,7 +136,11 @@ func Do(req *http.Request) (*http.Response, error) { } var client *http.Client -var connKey, secureKey struct{} + +type key string + +var connKey = key("conn") +var secureKey = key("secure") func WithConn() (context.Context, *net.Conn) { pconn := new(net.Conn)