Zajmuję się tworzeniem serwera FTP w języku C#, właśnie skończyłem wdrażanie funkcji trybu jawnego FTPS przy użyciu klasy SslStream
i wszystko idzie prawie w porządku.Serwer FTPS używający .NET SslStream
Mam problemy z używaniem plikuZilla> 3.0.11 jako klienta. Mam google arround, i wydaje się, że implementacja sslstream
nie zamyka poprawnie połączenia. (nie wysyłając alertu close_notify
). Korzystanie z WinScp, SmartFTP i everfting lftp działa dobrze.
Wszelkie pomysły lub jakakolwiek inna biblioteka SSL?
A może jakiś sposób na zakodowanie ostrzeżenia close_notify
i wysłanie go?
Przykładowy kod przykładowy byłby świetny!
Tworzenie SslStream:
_sslStream = new SslStream(socket.GetStream());
var _cert = new X509Certificate2(certPath,pass);
_sslStream.AuthenticateAsServer(_cert);
połączenia zamknięciem: log
_sslStream.Close();
socket.Close();
_sslStream = null;
socket = null;
FileZilla 3.6.0.2 Błąd:
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.
Jak zamykasz parę? Proszę pokazać swój kod. – Polyfun
Właśnie przypomniałem - miałem ten sam problem z Filezillą, kiedy wdrażał nasz serwer FTPS. Rozwiązał go, modyfikując klasy SSL, jednak nie masz tego wyboru przy użyciu strumienia SSL. Więc możesz 1) zignorować Filezillę 2) Prześlij łatkę do GnuTLS, która zignoruje ten błąd :) 3) Otwórz skrzynkę gdzieś na forach Microsoftu - to zachowanie nie jest zgodne ze standardem, ponieważ RFC wyraźnie wymaga "Każda strona jest wymagana do wysłania a close_notify alert przed zamknięciem strony zapisu połączenia. " –
Ten sam problem tutaj, czy kiedykolwiek znalazłeś działające rozwiązanie? –