我有一个开放的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)
TlsConf
tls.LoadX509KeyPair
tx.Conn = tls.Server(tx.Conn, tx.Server.Conf.TlsConf) tx.Text = textproto.NewConn(tx.Conn)
当我这样做时,当服务器尝试握手时,我在客户端上遇到了分段错误。我执行一个SMTP服务器,并正与测试它swaks使用-tls标志。Swaks的终端输出如下
-tls
-> STARTTLS <- 220 Start TLS Segmentation fault: 11
由于swaks是经过测试的工具,并且可以与我以前使用过的nodeJS SMTP实现一起使用,因此我不怀疑该错误是在客户端。
我做错了什么或缺少了什么?
PS:当从现有的不安全连接启动TLS连接时,究竟发生了什么?客户端是在其他端口上建立新连接还是重新使用该连接?
沟渠,使用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) } }