首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果运行了tls_start,EventMachine是否会在close_connection上发出close_notify?

如果运行了tls_start,EventMachine是否会在close_connection上发出close_notify?
EN

Stack Overflow用户
提问于 2012-09-25 16:25:33
回答 2查看 591关注 0票数 15

我正在尝试编程一个简单的FTPS服务器基于EventMachine。

控制套接字工作正常。当使用数据套接字进行数据传输时,似乎一切工作正常(TLS握手成功完成,数据被接收),但随后我收到一条错误消息。下面是我在Filezilla中得到的:

Command:    LIST
Response:   150 Opening ASCII mode data connection for file list
Trace:  CFtpControlSocket::TransferParseResponse()
Trace:    code = 1
Trace:    state = 4
Trace:  CFtpControlSocket::SendNextCommand()
Trace:  CFtpControlSocket::TransferSend()
Trace:    state = 5
Trace:  CTransferSocket::OnConnect
Trace:  CTlsSocket::Handshake()
Trace:  gnutls_session_get_data on primary socket failed: -51
Trace:  CTlsSocket::ContinueHandshake()
Trace:  CTlsSocket::OnSend()
Trace:  CTlsSocket::OnSend()
Trace:  CTlsSocket::OnRead()
Trace:  CTlsSocket::ContinueHandshake()
Trace:  CTlsSocket::OnRead()
Trace:  CTlsSocket::ContinueHandshake()
Trace:  Handshake successful
Trace:  Cipher: AES-256-CBC, MAC: SHA1
Trace:  CTlsSocket::OnRead()
Trace:  CTransferSocket::OnConnect
Trace:  CTransferSocket::OnReceive(), m_transferMode=0
Listing:    -rwxrwxrwx 1 owner  group         1011 Dec 12 23:05 a.tmp
Trace:  CTlsSocket::Failure(-9, 0)
Error:  GnuTLS error -9: A TLS packet with unexpected length was received.
Status: Server did not properly shut down TLS connection
Error:  Could not read from transfer socket: ECONNABORTED - Connection aborted
Trace:  CTransferSocket::TransferEnd(3)
Trace:  CFtpControlSocket::OnReceive()
Response:   226 Closing data connection, sent 70 bytes
Trace:  CFtpControlSocket::TransferParseResponse()
Trace:    code = 2
Trace:    state = 5
Trace:  CFtpControlSocket::SendNextCommand()
Trace:  CFtpControlSocket::TransferSend()
Trace:    state = 8
Trace:  CFtpControlSocket::TransferEnd()
Trace:  CFtpControlSocket::ResetOperation(2)
Trace:  CControlSocket::ResetOperation(2)
Trace:  CFtpControlSocket::ParseSubcommandResult(2)
Trace:  CFtpControlSocket::ListSubcommandResult()
Trace:    state = 3
Trace:  CFtpControlSocket::ResetOperation(2)
Trace:  CControlSocket::ResetOperation(2)
Error:  Failed to retrieve directory listing
Trace:  CFileZillaEnginePrivate::ResetOperation(2)

ftp-ssl也会发出一个错误,尽管有些不同

--> LIST
150 Opening ASCII mode data connection for file list
===>START SSL connect on DATA
ftp: SSL_connect DATA error 0 - error:00000000:lib(0):func(0):reason(0)
226 Closing data connection, sent 70 bytes
421 Service not available, remote server has closed connection

从我在web上发现的情况来看,我怀疑这是因为close_notify没有在连接结束时发出?如果是这样的话,是否有任何已知的基于Ruby的解决方案(f.ex.使用OpenSSL::SSL::SSLSocket)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-28 04:28:58

答案很简短:不,如果运行的是tls_start,EventMachine不会在close_connection上发出close_notify。

票数 0
EN

Stack Overflow用户

发布于 2013-12-12 09:47:57

我发现SSL在读取证书后“重新打开”了一个连接,所以这里的解决办法是:

def receive_data bitOfData
if (self.class isSomeSortOfTLSreadingClass && bitOfData.length == 1) then
 @headBuff << bitOfData
 return
 end
 # TLS connection closes on first byte, then re-opens.
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12578935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档