Tôi đang cố gắng lập trình một máy chủ FTPS đơn giản dựa trên EventMachine.Sự cố EventMachine có đóng close_notify trên close_connection nếu tls_start được chạy không?
Ổ cắm điều khiển hoạt động bình thường. Khi sử dụng ổ cắm dữ liệu để truyền dữ liệu, có vẻ như mọi thứ hoạt động tốt (bắt tay TLS hoàn tất thành công và dữ liệu được nhận), nhưng sau đó tôi nhận được một thông báo lỗi. Dưới đây là những gì tôi nhận được trong 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 cũng phát hành một lỗi mặc dù hơi khác
--> 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
Từ những gì tôi tìm thấy trên web tôi nghi ngờ hành vi này là vì close_notify không được cấp tại kết thúc kết nối? Nếu vậy, có bất kỳ giải pháp dựa trên Ruby đã biết nào không (f.ex. using OpenSSL :: SSL :: SSLSocket)?
** Shameless plug cảnh báo: ** [Foxbat] (https://github.com/m0wfo/foxbat) quản lý khởi động và dọn dẹp công cụ SSL cho bạn nếu bạn đang sử dụng JRuby :) –
Bạn đã bao giờ làm việc đó chưa? Tôi có thể sử dụng start_tls cho socket điều khiển, nhưng khi sử dụng nó trên socket dữ liệu, client (filezilla) luôn phàn nàn về việc bắt tay xấu ... :( – gucki
không và tôi nghi ngờ rằng nó có thể –