使用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连接?