我實現了我的自定義FTP類以與我付費的託管服務器一起工作。 我使用FTP進行備份,恢復和更新我的應用程序。 我現在正在開始使用ssl來投入生產。 我問我的託管公司是否支持SSL協議,他們說他們這樣做。帶EnableSSL的FtpWebRequest
所以我修改微軟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 Information: 0 : [0216] FtpControlStream#41622463 - Received response [227 Entering Passive Mode (the IP and port number).]
消息:
System.Net Error: 0 : [0216] Exception in the FtpWebRequest#12547953::GetResponse - The remote server returned an error: 227 Entering Passive Mode (the IP and port number).
我嘗試設置
reqFTP.UsePassive = true;
屬性設置爲false,然後我得到此錯誤:
System.Net Information: 0 : [2692] FtpControlStream#4878312 - Received response [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
總是返回真。在這個修改之後,效果是沒有的。
而且我不明白:
- 在這一瞬間的應用程序正在使用服務器證書,對不對?
- 並在修改之前也使用我的?
有人可以解釋我的工作原理嗎?
編輯:許多電子郵件與託管公司交換後,事實證明,他們有他們的FTP軟件的問題,這是沒有問題的代碼。
然後發佈您的編輯作爲答案並接受它。 – 2012-04-06 23:48:02