[英]Golang TLS handshake error - "first record does not look like a TLS handshake"?
[英]Why is tls.Client failing with message:first record does not look like a TLS handshake
我正在尝试在https://github.com/golang/build/tree/master/cmd/coordinator运行 buildlet
有一个本地托管的服务器连接一直无法连接并给出错误:
first record does not look like a TLS handshake
失败的代码来自 build/cmd/buildlet/reverse.go,它是:
tcpConn.SetDeadline(time.Now().Add(30 * time.Second))
config := &tls.Config{
ServerName: serverName,
InsecureSkipVerify: devMode,
}
conn := tls.Client(tcpConn, config)
if err := conn.Handshake(); err != nil {
return nil, fmt.Errorf("failed to handshake with coordinator: %v", err)
}
我已经收集到应该在忽略 TLS 问题的同时建立连接,因为服务器位于 localhost
我似乎无法弄清楚如何解决这个问题。 重新创建我的问题的说明在上面的链接中。 我建议的唯一更改是使用
go run . -mode=dev -listen-http=localhost:8119
对于第一个命令
InsecureSkipVerify
只是意味着放宽了 TLS 证书验证约束(到您的连接不安全且容易受到 MITM 攻击的程度)
从文档中:
如果 InsecureSkipVerify 为真,crypto/tls 接受服务器提供的任何证书以及该证书中的任何主机名。
您仍然需要在另一端有一个使用 TLS 的连接。 您收到的错误意味着连接的另一端不使用 TLS。
如果您不想在 devMode 中使用 TLS,那么您应该在 dev 模式下直接使用tcpConn
,而不用*tls.Conn
包装它。 *tls.Conn
实现net.Conn
,所以在握手之后,你如何使用连接应该没有任何区别,无论它是否有 TLS。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.