如何安全关闭SSL连接

时间:2018-12-18 02:44:28

标签: ssl go

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

0 个答案:

没有答案