Ich entwickle einen FTP-Server in C#, ich habe gerade FTPS expliziten Modus Funktionalität implementiert mit SslStream
Klasse und alles geht fast in Ordnung.FTPS Server mit .NET SslStream
Ich habe Probleme mit fileZilla> 3.0.11 als Client. Ich google arround, und es scheint, dass sslstream
Implementierung die Verbindung nicht ordnungsgemäß schließt. (keine close_notify
Warnung senden). Mit WinScp funktioniert SmartFTP und lftp everithing gut.
Irgendwelche Ideen oder andere SSL-Bibliothek?
Oder vielleicht eine Möglichkeit, die close_notify
Warnung fest zu kodieren und senden Sie es?
Konkrete Codebeispiel wäre toll!
Erstellen SslStream:
_sslStream = new SslStream(socket.GetStream());
var _cert = new X509Certificate2(certPath,pass);
_sslStream.AuthenticateAsServer(_cert);
Schluss Verbindungen:
_sslStream.Close();
socket.Close();
_sslStream = null;
socket = null;
FileZilla 3.6.0.2 Fehlerprotokoll:
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.
Wie schließen Sie den Dampf? Bitte zeigen Sie Ihren Code. – Polyfun
Ich erinnerte mich gerade - ich hatte dasselbe Problem mit Filezilla, als wir unseren FTPS-Server implementiert haben. Sie haben es gelöst, indem Sie SSL-Klassen repariert haben, aber Sie haben keine Möglichkeit, den SSL-Stream zu verwenden. So können Sie 1) Filezilla ignorieren 2) einen Patch an GnuTLS senden, der diesen Fehler ignoriert :) 3) Öffnen Sie einen Fall irgendwo in Microsoft-Foren - dieses Verhalten ist nicht standardkonform, da RFC eindeutig erfordert "Jede Partei muss senden ein close_notify-Alarm vor dem Schließen der Schreibseite der Verbindung. " –
Das gleiche Problem hier, hast du jemals eine funktionierende Lösung gefunden? –