我实现了我的自定义 FTP 类来使用我付费的托管服务器。我使用 FTP 来备份、恢复和更新我的应用程序。我现在正要启用 ssl 将其投入生产。我问我的托管公司是否支持 ssl 协议,他们说支持。
所以我在微软 MSDN 教程之后修改了我的方法,如下所示:
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(m_ftpAddress.Trim()));
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(m_ftpUsername, m_ftpPassword);
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate);
X509Certificate cert = new X509Certificate(path to a certificate created with makecert.exe);
reqFTP.ClientCertificates.Add(cert);
reqFTP.AuthenticationLevel = AuthenticationLevel.MutualAuthRequested;
reqFTP.ImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Identification;
reqFTP.EnableSsl = true;
现在,MSDN 表示,如果服务器支持 ssl 协议,则在使用 AUTH TLS 询问时它不会抛出异常。这可以在跟踪日志中看到。所以我想这不是服务器问题。
在身份验证阶段之后,服务器返回一个
System.Net 信息:0:[0216] FtpControlStream#41622463 - 收到响应 [227 进入被动模式(IP 和端口号)。]
触发错误的消息:
System.Net 错误:0:[0216] FtpWebRequest#12547953::GetResponse 中的异常 - 远程服务器返回错误:227 进入被动模式(IP 和端口号)。
我尝试设置
reqFTP.UsePassive = true;
属性为false,然后我收到此错误:
System.Net 信息:0:[2692] FtpControlStream#4878312 - 收到响应 [500 Illegal PORT command]
当然,如果没有将 EnableSLL 属性设置为 true,则一切正常。
有人对此有任何想法吗?
编辑:我将代码修改为休闲:
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(m_ftpAddress.Trim()));
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(m_ftpUsername, m_ftpPassword);
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
ServicePointManager.ServerCertificateValidationCallback = new
System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate);
reqFTP.ClientCertificates.Add(cert);
reqFTP.AuthenticationLevel = AuthenticationLevel.MutualAuthRequested;
reqFTP.ImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Identification
reqFTP.EnableSsl = true;
ValidateServerCertificate
总是返回true。在此修改后,效果是没有的。
我不明白:
- 此时应用程序正在使用服务器证书,对吗?
- 在修改之前也使用我的?
有人可以解释我这是如何工作的吗?
编辑:在与托管公司交换了许多电子邮件后,事实证明他们的 FTP 软件有问题,而代码也没有问题。