为什么我的 Go 代码中忽略了 MinVersion 标志?
Why is the MinVersion flag being ignored in my Go code?
我正在尝试调试与给定主机的失败连接。我已经记录了通过浏览器向该主机发出的成功请求的数据包捕获,以及通过下面的 Go 代码发出的不成功请求:
package main
import (
"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 客户端,并确认我使用的是正确的语法。知道我在这里做错了什么吗?
TLS 1.3 握手也 begins with a TLS 1.2 Client Hello
如果我们在 golang 代码中指定 TLS 1.3,在 supported_versions
扩展中只有一个 TLS 1.3
如果服务器不支持 TLS 1.3 或任何其他原因,连接在握手阶段失败,看起来像 TLS 1.2 连接失败。
我正在尝试调试与给定主机的失败连接。我已经记录了通过浏览器向该主机发出的成功请求的数据包捕获,以及通过下面的 Go 代码发出的不成功请求:
package main
import (
"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 客户端,并确认我使用的是正确的语法。知道我在这里做错了什么吗?
TLS 1.3 握手也 begins with a TLS 1.2 Client Hello
如果我们在 golang 代码中指定 TLS 1.3,在 supported_versions
扩展中只有一个 TLS 1.3
如果服务器不支持 TLS 1.3 或任何其他原因,连接在握手阶段失败,看起来像 TLS 1.2 连接失败。