Uaktualnij połączenie do TLS w Go
Mam otwarte połączenie TCP i czytam z niego za pomocą pętli 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 ...
}
Teraz chcę zaktualizować połączenie do TLS w ten sposób (TlsConf
zawiera certyfikat załadowanytls.LoadX509KeyPair
)
tx.Conn = tls.Server(tx.Conn, tx.Server.Conf.TlsConf)
tx.Text = textproto.NewConn(tx.Conn)
Kiedy to robię, otrzymuję błąd segmentacji na kliencie, gdy serwer próbuje potwierdzić. Implementuję serwer SMTP i testuję goswaks używając-tls
flaga. Wyjście terminalu zswaks jest następujący
-> STARTTLS
<- 220 Start TLS
Segmentation fault: 11
Ponieważ swaks jest sprawdzonym narzędziem i pracował z implementacją SMTP nodeJS, którą miałem wcześniej, nie podejrzewam, że błąd występuje po stronie klienta.
Co zrobiłem źle lub czego brakuje?
PS: Kiedy połączenie TLS jest uruchamiane z istniejącego niebezpiecznego połączenia, co dokładnie się dzieje? Czy klient nawiązuje nowe połączenie na innym porcie lub czy połączenie jest ponownie wykorzystywane?