使用.NET SslStream的FTPS服务器

Mor*_*der 5 .net c# ssl ftps

我正在用C#开发一个FTP服务器,我刚刚使用SslStream类完成了FTPS显式模式功能,一切都很顺利.

我在使用fileZilla> 3.0.11作为客户端时遇到问题.我google arround,似乎sslstream实现没有正确关闭连接.(不发送close_notify警报).使用WinScp,SmartFTP和lftp everithing工作正常.

任何想法或任何其他SSL库?

或者也许某种方式硬编码close_notify警报并发送它?

具体的代码示例会很棒!

创建sslStream:

_sslStream = new SslStream(socket.GetStream());      
var _cert = new X509Certificate2(certPath,pass);    
_sslStream.AuthenticateAsServer(_cert);
Run Code Online (Sandbox Code Playgroud)

关闭连接:

_sslStream.Close();
socket.Close();
_sslStream = null;
socket = null;
Run Code Online (Sandbox Code Playgroud)

FileZilla 3.6.0.2错误日志:

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.
Run Code Online (Sandbox Code Playgroud)

Nic*_*sky 5

我想,你有一个真正的理由重新发明轮子.已经存在在C#/ .NET中实现FTPS服务器的库,如SecureBlackbox(但它是商业的).