为了账号安全,请及时绑定邮箱和手机立即绑定

为什么在我的 Go 代码中忽略 MinVersion 标志?

为什么在我的 Go 代码中忽略 MinVersion 标志?

Go
繁星coding 2022-10-10 17:51:05
我正在尝试调试与给定主机的失败连接。我已经记录了通过浏览器向该主机发出的成功请求以及通过下面的 Go 代码发出的不成功请求的数据包捕获:package mainimport (        "crypto/tls"        "log")func main() {        log.SetFlags(log.Lshortfile)        conf := &tls.Config{                //InsecureSkipVerify: true,                MinVersion: tls.VersionTLS13,                MaxVersion: tls.VersionTLS13,        }        conn, err := tls.Dial("tcp", "x.x.x.x:443", conf)        if err != nil {                log.Println(err)                return        }        defer conn.Close()        n, err := conn.Write([]byte("hello\n"))        if err != nil {                log.Println(n, err)                return        }        buf := make([]byte, 100)        n, err = conn.Read(buf)        if err != nil {                log.Println(n, err)                return        }        println(string(buf[:n]))}在检查成功和不成功请求中的 Client Hello 数据包后,我注意到成功的请求使用 TLSv1.3 而不成功的请求使用 TLSv1.2。我上面的代码指定我只想在我的请求中使用 TLSv1.3,但无论出于何种原因,请求仍会尝试使用 TLSv1.2。我试过咨询用 go 编写的各种 http 客户端示例,并确认我使用了正确的语法。有什么想法我在这里做错了吗?
查看完整描述

1 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

TLS 1.3 握手也以 TLS 1.2 开头Client Hello

//img1.sycdn.imooc.com//6343eb230001294612980338.jpg

如果我们在 golang 代码中指定 TLS 1.3,在supported_versions扩展中只有一个TLS 1.3


//img1.sycdn.imooc.com//6343eb2f00014ffd06900206.jpg

如果服务器不支持 TLS 1.3 或任何其他原因,握手阶段连接失败,则看起来像是 TLS 1.2 连接失败。



查看完整回答
反对 回复 2022-10-10
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信