Как безопасно отключить SSL-соединение - PullRequest
0 голосов
/ 18 декабря 2018

Используя 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-соединение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...