繁体   English   中英

为什么 tls.Client 失败并显示消息:第一条记录看起来不像 TLS 握手

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM