2009-10-22 9 views
5

Özel FTP sınıfımı, ödediğim barındırılan bir sunucuyla çalışmak üzere uyguladı. Uygulamamın yedeklenmesi, geri yüklenmesi ve güncellenmesi için FTP'yi kullanıyorum. Şu an üretimde kullanması için ssl'yi etkinleştirmek istediğim andayım. Hosting şirketime ssl protokolünü destekleyip desteklemediklerini sordum ve yaptıkları söyledi.EnableSSL ile FtpWebRequest

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; 

Şimdi, MSDN sunucu ssl protokolünü destekliyorsa AUTH TLS ile sorulduğunda o atmak ve istisna olmayacağını söylüyor:

Yani böyle bir şey için, Microsoft MSDN öğretici sonra Metotlarımı güncellenmiştir. Bu, izleme günlüğünde görülebilir. Bu yüzden bir sunucu sorunu olmadığını varsayalım. Sonra olsun

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

Ben false

reqFTP.UsePassive = true; 

özelliğini ayarlayarak çalıştı

ve:

kimlik aşamasından sonra sunucu bir hata tetikleyen bir

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

iletisi döndürür Bu hata:

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

Elbette, EnableSLL özelliği true olarak ayarlanmadığında, her şey sorunsuz çalışır.

Bu konuda herhangi bir fikri olan var mı?

Düzenleme:

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 hep gerçek döndürür: Ben Taksonların kod güncellenmiştir. Bu değişikliklerden sonra etki hiçbiri değildir.

Ve anlamıyorum: Bu anda

  • uygulama doğru, sunucu sertifikası kullanıyor?
  • Ve modifikasyonlar benimki kullanmadan önce mi?

Birisi bunun nasıl çalıştığını açıklayabilir mi?

Düzenleme: Birçok e-posta barındırma şirketiyle değiş tokuş ettikten sonra, onların FTP yazılımı ile ilgili sorunları olduğu ortaya çıktı ve bu kodla ilgili bir sorun değildi.

+1

Düzenlemenizi yanıt olarak gönderin ve kabul edin. –

cevap

1

Ev sahibinizin FTPS mi yoksa SFTP mi kullandığını kontrol ettiniz mi?

bunlar farklı protokollerdir ve sunucunuz yanlış olandan söz ettiğinizi varsaymış olabilir.

+0

Cevabınız için teşekkür ederiz. Barındırma şirketi ile birlikte çalıştım ve problem çözüldü. Kendi ortamlarına bir ortam olduğu ortaya çıktı. – mosu

+0

^Barındırma ortamınız EC2 Amazon bulutunun barındırıcısı olur mu? – D3vtr0n