Используя Go, как можно безопасно отключить tls.Conn без полного закрытия основного соединения?У меня есть рабочее решение, но я не уверен, что есть лучший способ.
В моем приложении есть не-SSL-соединение, которое в конечном итоге «обновляется» до SSL-соединения.Затем в какой-то момент соединение SSL должно быть чисто закрыто, и соединение должно вернуться к версии без SSL (где незашифрованный трафик может передаваться между двумя сторонами).
Примерно так:
import "tls"
func app(connection net.Conn){
// process some data on the connection, then eventually change it to SSL
ssl = tls.Client(connection, sslConfig) // sslConfig defined elsewhere
ssl.Handshake()
// process data using ssl for a while
// now shut down SSL but maintin the original connection
ssl.CloseWrite()
// at this point we have sent a closeNotify alert to the remote side and are expecting a closeNotify be sent back to us.
// the only way to read the closeNotify is to attempt to read 1 byte
b := make([]byte, 1)
ssl.Read(b)
// assuming the remote side shut down the connection properly, the SSL transport should be finished
connection.Read(...) // can go back to the unencrypted connection
}
Мне не нравится в этом вопросе создание массива в 1 байт и чтение из него только для того, чтобы соединение SSL могло читать запись notifyClose.
Есть ли лучший способ для чистого отключенияSSL-соединение?