登录
首页 >  Golang >  Go问答

在 Go 中升级到 TLS 的连接

来源:Golang技术栈

时间:2023-05-03 16:16:31 178浏览 收藏

哈喽!今天心血来潮给大家带来了《在 Go 中升级到 TLS 的连接》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到golang,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

我有一个打开的 TCP 连接,并使用这样的 for 循环从中读取

for {
  // tx.Text is of type textproto.Conn
  // the underlying connection is stored in tx.Conn
  l, err := tx.Text.Reader.ReadLine()

  // do stuff with the text line ...
}

现在我想像这样升级到 TLS 的连接(TlsConf包含加载的证书tls.LoadX509KeyPair

tx.Conn = tls.Server(tx.Conn, tx.Server.Conf.TlsConf)
tx.Text = textproto.NewConn(tx.Conn)

当我这样做时,当服务器尝试握手时,客户端出现分段错误。我正在实现一个 SMTP 服务器,并正在使用该标志使用swaks对其进行测试。swaks-tls的终端输出如下

-> STARTTLS

由于 swaks 是一个经过测试的工具,并且与我之前的 nodeJS SMTP 实现一起使用,我不怀疑错误出在客户端。

我做错了什么或缺少什么?

PS:当从现有的不安全连接启动 TLS 连接时,究竟会发生什么?客户端是在不同的端口上建立新连接还是重用连接?

正确答案

抛弃了 swaks,使用 Go 自己的 smtp.SendMail 构建了一个小工具来测试 TLS:

package main

import (
  "fmt"
  "net/smtp"
)

func main() {
  err := smtp.SendMail(
    "127.0.0.1:2525",
    nil,
    "src@test.local",
    []string{"dst@test.local"},
    []byte("Hello! Just testing."),
  )
  if err != nil {
    panic(err)
  }
}

以上就是《在 Go 中升级到 TLS 的连接》的详细内容,更多关于golang的资料请关注golang学习网公众号!

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