![](/img/trans.png)
[英]understanding server/proxy/client certificates with .NET sslstream
[英]FTPS Server using .NET SslStream
我正在使用C#开发一个FTP服务器,我刚刚使用SslStream
类完成了FTPS显式模式功能,一切顺利。
我在使用fileZilla> 3.0.11作为客户端时遇到问题。 我google sslstream
,似乎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);
关闭连接:
_sslStream.Close();
socket.Close();
_sslStream = null;
socket = null;
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.
我想,你有一个真正的理由重新发明轮子。 已经存在在C#/ .NET中实现FTPS服务器的库,如SecureBlackbox (但它是商业的)。
请查看我在此处发布的解决方法。 如果我们能够共同改善这种解决方案,那就太棒了。
如果在关闭之前调用Socket上的Shutdown会发生什么?
socket.Shutdown(SocketShutdown.Both);
怎么样
_sslStream.Dispose();
我想知道Dispose方法是否处理close_notify
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.