2009-10-22 13 views
5

Ich habe meine benutzerdefinierte FTP-Klasse implementiert, um mit einem gehosteten Server zu arbeiten, für den ich bezahle. Ich benutze den FTP für die Sicherung, Wiederherstellung und Aktualisierung meiner Anwendung. Ich bin jetzt in dem Moment, wo ich die ssl aktivieren möchte, um dies in Produktion zu setzen. Ich fragte meine Hosting-Firma, ob sie das SSL-Protokoll unterstützen und sie sagten, sie tun. SoFtpWebRequest mit EnableSSL

Ich veränderte meine Methoden nach Microsoft MSDN Tutorial etwas wie folgt aus:

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; 

Nun wird die MSDN sagt, dass, wenn der Server das SSL-Protokoll unterstützt wird es nicht werfen und Ausnahme, wenn sie mit AUTH TLS gefragt. Dies kann im Ablaufverfolgungsprotokoll gesehen werden. Also ich nehme an, es ist kein Serverproblem.

Nach der Authentifizierungsphase gibt der Server eine

System.Net Information: 0 : [0216] FtpControlStream#41622463 - Received response [227 Entering Passive Mode (the IP and port number).]

Nachricht, die einen Fehler auslöst:

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).

Ich versuchte, die

reqFTP.UsePassive = true; 

Eigenschaft auf false gesetzt und dann erhalte ich Dieser Fehler:

System.Net Information: 0 : [2692] FtpControlStream#4878312 - Received response [500 Illegal PORT command]

Natürlich, ohne die EnableSLL -Eigenschaft, die auf True festgelegt ist, funktioniert alles ohne Probleme.

Hat jemand eine Idee dazu?

Edit: ich den Code als Brachen geändert:

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; 

Die ValidateServerCertificate immer wieder wahr. Nach diesen Modifikationen ist der Effekt keiner mehr.

Und ich verstehe nicht:

  • In diesem Moment die Anwendung des Server-Zertifikat verwendet, nicht wahr?
  • Und vor den Änderungen wurde auch meins verwendet?

Kann mir jemand erklären, wie das funktioniert?

Edit: Nach vielen E-Mails ausgetauscht mit der Hosting-Firma stellte sich heraus, dass sie Probleme mit ihrer FTP-Software hatten und es war kein Problem mit dem Code.

+1

Dann posten Sie Ihre Bearbeitung als Antwort und akzeptieren Sie sie. –

Antwort

1

Haben Sie überprüft, ob Ihr Host FTPS oder SFTP verwendet?

Sie sind unterschiedliche Protokolle und Ihr Host könnte annehmen, dass Sie über das falsche gesprochen haben.

+0

Danke für die Antwort. Ich arbeitete mit der Hosting-Firma zusammen und das Problem wurde gelöst. Es stellte sich heraus, dass es sich um eine Umgebung handelte, in der sie sich wohl fühlen. – mosu

+0

^Wäre Ihre Hosting-Umgebung zufällig EC2 Amazon Cloud Hosting? – D3vtr0n

Verwandte Themen