Sto sviluppando un server FTP in C#, ho appena finito di implementare la funzionalità in modalità esplicita FTPS usando la classe SslStream
e tutto va quasi bene.FTPS Server using .NET SslStream
Ho problemi con fileZilla> 3.0.11 come client. I google arround e sembra che l'implementazione sslstream
non chiuda la connessione correttamente. (non inviare l'avviso close_notify
). L'utilizzo di WinScp, SmartFTP e lftp everithing funziona perfettamente.
Qualche idea o altra libreria SSL?
O forse un modo per codificare l'allarme close_notify
e inviarlo?
Un esempio di codice concreto sarebbe fantastico!
Creazione SslStream:
_sslStream = new SslStream(socket.GetStream());
var _cert = new X509Certificate2(certPath,pass);
_sslStream.AuthenticateAsServer(_cert);
connessioni di chiusura: registro
_sslStream.Close();
socket.Close();
_sslStream = null;
socket = null;
FileZilla 3.6.0.2 Errore:
Response: 150 Opening data connection for LIST
Trace: CFtpControlSocket::TransferParseResponse()
Trace: code = 1
Trace: state = 4
Trace: CFtpControlSocket::SendNextCommand()
Trace: CFtpControlSocket::TransferSend()
Trace: state = 5
Trace: CTlsSocket::OnRead()
Trace: CTlsSocket::ContinueHandshake()
Trace: TLS Handshake successful
Trace: TLS Session resumed
Trace: Cipher: AES-128-CBC, MAC: SHA1
Trace: CTransferSocket::OnConnect
Trace: CTransferSocket::OnReceive(), m_transferMode=0
Trace: CTlsSocket::Failure(-110, 0)
Error: GnuTLS error -110 in gnutls_record_recv: The TLS connection was non-properly terminated.
Error: Could not read from transfer socket: ECONNABORTED - Connection aborted
Trace: CTransferSocket::TransferEnd(3)
Trace: CFtpControlSocket::TransferEnd()
Trace: CTlsSocket::OnRead()
Trace: CFtpControlSocket::OnReceive()
Response: 226 LIST successful.
Come stai chiudendo il vapore? Si prega di mostrare il codice. – Polyfun
Ho appena richiamato - Ho avuto lo stesso problema con Filezilla quando implementava il nostro server FTPS. Risolto risolvendo le classi SSL, tuttavia non hai questa scelta con lo streaming SSL. Quindi puoi 1) ignorare Filezilla 2) Invia una patch a GnuTLS che ignorerà questo errore :) 3) Apri una custodia da qualche parte nei forum Microsoft - questo comportamento non è conforme allo standard, poiché RFC richiede chiaramente "Ogni parte è richiesta per inviare un avviso close_notify prima di chiudere il lato di scrittura della connessione. " –
Lo stesso problema qui, hai mai trovato una soluzione funzionante? –