问题描述
我正在编写一个简单的应用程序以连接到SFTP服务器(端口990安全)。我使用的服务器是FileZilla服务器,版本为0.9.60。
当我尝试打开数据连接时,服务器会用
拒绝它“数据连接的TLS会话尚未恢复或该会话与控制连接不匹配”
很好,除了Microsoft声称该会话已缓存:
框架在创建SSL会话时会对其进行缓存,并在可能的情况下尝试将缓存的会话重新用于新请求。尝试重用SSL会话时,框架会使用ClientCertificates的第一个元素(如果有),或者如果ClientCertificates为空,则尝试重用匿名会话。
MS SslStream constructor description
好吧,如果FileZilla表示它没有被重用,并且我可以在FileZilla服务器中禁用此要求以使客户端SslStream正常工作,那么我怀疑Microsoft的SslStream对象中存在某些错误。 (不建议禁用它,最终用户不太可能允许它)
也许由于服务器相同但端口号不同而没有重用它吗?
在SslStream类中找不到支持该设置的文档。
如何从控制通道上的现有流中获取“会话”,并将其分配给新的数据通道流?
我的代码片段就是这样(不全面,仅打算包含相关部分):
private Stream Putfile(string destname) {
FtpReply ftpreply; // Just a container to parse replies
SetupDataConnection();
ftpreply = SendCtrlCommand("STOR " + destname,false);
m_dataSslStream = CreateSSLStream(m_dataCxn.GetStream(),false);
return m_dataSslStream;
}
// Tell the server go PASV get the connection params
private void SetupDataConnection() {
FtpReply ftpreply;
ftpreply = SendCtrlCommand("PASV",false);
IPEndPoint dataPort = ParseIPandPort(ftpreply.Reply);
SetupPassiveConnection(dataPort);
}
// create the TCP connection to the server
private void SetupPassiveConnection(IPEndPoint endpoint) {
CloseDataCxn(); // If one was already open - otherwise harmless
m_dataCxn = new TcpClient(endpoint.Address.ToString(),endpoint.Port);
Stream s = m_dataCxn.GetStream();
s.ReadTimeout = 120000;
s.WriteTimeout = 120000;
}
// Create the SslStream object... Fails - The server says it need to be resuing the session from the control SslStream
private SslStream CreateSSLStream(Stream stream,bool leaveOpen) {
SslStream sslStream;
sslStream = new SslStream(stream,leaveOpen,new RemoteCertificateValidationCallback(m_userVerificationCallback),null);
sslStream.ReadTimeout = 60000;
sslStream.WriteTimeout = 60000;
X509CertificateCollection x509CertCollection = new X509CertificateCollection();
if (m_sslClientCert != null) {
x509CertCollection.Add(m_sslClientCert);
}
sslStream.AuthenticateAsClient(m_hostname,x509CertCollection,SslProtocols.Default,true);
return sslStream;
}
任何人都可以提供一种解决方案来让SslStream像FileZilla期望的那样“重用”会话吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)