登录
首页 >  Golang >  Go问答

为什么 tls.Client 失败且显示消息:握手的第一条记录不符合 TLS 的格式

来源:stackoverflow

时间:2024-02-26 09:39:23 342浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《为什么 tls.Client 失败且显示消息:握手的第一条记录不符合 TLS 的格式》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我正在尝试在 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 问题,因为服务器位于本地主机

我似乎不知道如何解决这个问题。 有关重现我的问题的说明位于上面的链接中。我建议的唯一改变是使用

go run . -mode=dev -listen-http=localhost:8119

第一个命令


正确答案


InsecureSkipVerify 只是意味着 TLS 证书验证约束放宽(达到您的连接不安全且容易受到 MITM 攻击的程度)

来自documentation

您仍需要在另一端建立使用 TLS 的连接。您收到的错误意味着连接的另一端不支持 TLS。

如果您不想在 devMode 中使用 TLS,那么您应该在 dev 模式下直接使用 tcpConn,而不用 *tls.Conn 包装它。 *tls.Conn 实现了 net.Conn,因此握手之后,无论连接是否具有 TLS,使用连接的方式都不应该有任何差异。

理论要掌握,实操不能落!以上关于《为什么 tls.Client 失败且显示消息:握手的第一条记录不符合 TLS 的格式》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>