Actualizar una conexión a TLS en Go
Tengo una conexión TCP abierta y leo con un bucle for así.
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 ...
}
Ahora quiero actualizar la conexión a TLS de esta manera (TlsConf
contiene un certificado cargado contls.LoadX509KeyPair
)
tx.Conn = tls.Server(tx.Conn, tx.Server.Conf.TlsConf)
tx.Text = textproto.NewConn(tx.Conn)
Cuando hago esto, obtengo un error de segmentación en el cliente cuando el servidor intenta un protocolo de enlace. Estoy implementando un servidor SMTP y lo estoy probando conswaks utilizando la-tls
bandera. La salida terminal deswaks es el siguiente
-> STARTTLS
<- 220 Start TLS
Segmentation fault: 11
Ya que swaks es una herramienta probada y funcionó con la implementación SMTP de nodeJS que tuve antes, no sospecho que el error esté en el lado del cliente.
¿Qué hice mal o lo que falta?
PD: cuando se inicia una conexión TLS desde una conexión insegura existente, ¿qué sucede exactamente? ¿El cliente establece una nueva conexión en un puerto diferente o se reutiliza la conexión?