我实现了自定义FTP类,以便与我付费的托管服务器一起使用。 我使用FTP来备份,恢复和更新我的应用程序。 我现在正处于想要让ssl投入生产的那一刻。 我问我的托管公司他们是否支持ssl协议,他们说他们这样做。
所以我在Microsoft 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非法端口命令]
当然,如果没有将EnableSLL属性设置为true,一切都可以正常运行。
有没有人对此有任何想法?
编辑:我将代码修改为fallows:
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软件存在问题,而且代码没问题。
答案 0 :(得分:1)
您是否检查过您的主机是否使用FTPS或SFTP?
它们是不同的协议,你的主人可能认为你在谈论错误的协议。