Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用.NET SslStream的FTPS服务器_C#_.net_Ssl_Ftps - Fatal编程技术网

C# 使用.NET SslStream的FTPS服务器

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

我正在用C#开发一个FTP服务器,我刚刚使用
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服务器演示。无法解决问题:(.谢谢!