C# 使用.NET SslStream的FTPS服务器
我正在用C#开发一个FTP服务器,我刚刚使用C# 使用.NET SslStream的FTPS服务器,c#,.net,ssl,ftps,C#,.net,Ssl,Ftps,我正在用C#开发一个FTP服务器,我刚刚使用SslStream类实现了FTPS显式模式功能,一切都很顺利 我在使用fileZilla>3.0.11作为客户端时遇到问题。我在google arround上搜索到,似乎sslstream实现没有正确地关闭连接。(不发送close\u notifyalert)。使用WinScp、SmartFTP和lftp都可以很好地工作 有什么想法或其他SSL库吗 或者可以通过某种方式将关闭\u notify警报硬编码并发送出去 具体的代码示例将是伟大的 创建sslS
SslStream
类实现了FTPS显式模式功能,一切都很顺利
我在使用fileZilla>3.0.11作为客户端时遇到问题。我在google arround上搜索到,似乎sslstream
实现没有正确地关闭连接。(不发送close\u notify
alert)。使用WinScp、SmartFTP和lftp都可以很好地工作
有什么想法或其他SSL库吗
或者可以通过某种方式将关闭\u 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服务器,比如(但是,它是商业化的)。如果在关闭套接字之前调用套接字上的Shutdown,会发生什么
socket.Shutdown(SocketShutdown.Both);
怎么样
_sslStream.Dispose();
我想知道Dispose方法是否处理
关闭\u notify
请查看我发布的解决方法。如果我们共同努力,使这一解决办法变得更好,那就太好了。您是如何关闭蒸汽的?请出示您的代码。我刚刚回忆起——在实现我们的FTPS服务器时,我和Filezilla有同样的问题。通过修复SSL类解决了这个问题,但是您没有使用SSL流的选择。因此,您可以1)忽略Filezilla 2)向GnuTLS提交一个补丁,该补丁将忽略此错误:)3)在Microsoft论坛上的某个位置打开一个案例-此行为不符合标准,因为RFC明确要求“各方必须在关闭连接的写入端之前发送关闭通知警报”。这里也有同样的问题,你找到有效的解决方案了吗?谢谢!。无论如何,你知道有什么免费的库吗?对于FTPS服务器,不幸的是,没有。但是对于SSL/TLS的东西,有BouncyCastle库-免费和开源。@Morvader SecureBackbox提供SSL/TLS层(比BouncyCastle灵活和强大得多)和两个FTPS服务器组件(低级组件和高级组件).任何关于使用BouncyCastle?的安全FTP连接的代码示例?。谢谢。对不起,没有例子。但是,您可以下载SecureBackbox,并从机箱中获得一个正常工作的FTPS服务器演示。无法解决问题:(.谢谢!