c# - 使用 .NET SslStream 的 FTPS 服务器

标签 c# .net ssl ftps

我正在用 C# 开发一个 FTP 服务器,我刚刚使用 SslStream 类完成了 FTPS 显式模式功能的实现,一切都几乎正常。

我在使用 fileZilla > 3.0.11 作为客户端时遇到问题。我用谷歌搜索了一下,似乎 sslstream 实现没有正确关闭连接。 (不发送 close_notify 警报)。使用 WinScp、SmartFTP 和 lftp 一切正常。

任何想法或任何其他 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 (但是,它是商业的)。

关于c# - 使用 .NET SslStream 的 FTPS 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15759355/

相关文章:

c# - ClickOnceInstall CefSharp Winforms 问题

c# - 我可以在同一个 ASP.NET MVC 网站上使用一个程序集的两个版本吗?

C# Winforms : A thread that can control the UI and can "sleep" without pausing the whole program. 怎么办?

c# - HttpWebRequest Response Stream 只返回 64k 的数据

c# - 为什么 .NET 事件有一个对象类型而不是 T 类型的发送者参数?

php - $_SERVER 容易被用户更改

c# - mysql批量插入一个文本文件

.net - 在sharpsvn中读取文件的内容

java - HttpGet 的 SSL 问题可能是因为服务器正在请求客户端身份验证

ssl - SSL 证书错误