Ich versuche einen einfachen FTPS-Server basierend auf EventMachine zu programmieren.Gibt EventMachine close_notify bei close_connection aus, wenn tls_start ausgeführt wurde?
Steuerbuchse funktioniert ordnungsgemäß. Wenn Data Socket für die Datenübertragung verwendet wird, scheint es, dass alles gut funktioniert (TLS-Handshake wird erfolgreich abgeschlossen und Daten empfangen), aber dann bekomme ich eine Fehlermeldung. Hier ist, was ich in Filezilla erhalten:
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 gibt auch einen Fehler, wenn auch etwas anders
--> 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
Von dem, was ich im Internet fand ich dieses Verhalten vermuten, weil close_notify nicht ausgegeben wird, das Ende der Verbindung? Wenn ja, gibt es dafür eine Ruby-basierte Lösung (zB mit OpenSSL :: SSL :: SSLSocket)?
** Shameless Plug-Alarm: ** [Foxbat] (https://github.com/m0wfo/foxbat) verwaltet die Initialisierung und Bereinigung der SSL-Engine für Sie, wenn Sie JRuby verwenden :) –
Haben Sie es jemals funktioniert? Ich kann start_tls für den Kontrollsocket verwenden, aber wenn es auf dem Datensteckplatz benutzt wird, klagt der Klient (filezilla) immer über schlechten Händedruck ... :( – gucki
nein und ich bezweifle, dass es möglich ist –