2009-10-22 6 views
5

J'ai implémenté ma classe FTP personnalisée pour travailler avec un serveur hébergé pour lequel je paie. J'utilise le FTP pour la sauvegarde, la restauration et la mise à jour de mon application. Je suis maintenant au moment où je veux permettre au SSL de mettre cela en production. J'ai demandé à mon hébergeur s'ils soutenaient le protocole SSL et ils ont dit qu'ils le faisaient.FtpWebRequest avec EnableSSL

Je modifié mes méthodes après tutoriel Microsoft MSDN à quelque chose comme ceci:

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; 

Maintenant, le MSDN dit que si le serveur prend en charge le protocole ssl il ne sera pas jeter et exception quand on lui demande avec AUTH TLS. Cela peut être vu dans le journal de suivi. Donc je suppose que ce n'est pas un problème de serveur.

Après la phase d'authentification du serveur renvoie un

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

un message

qui déclenche une erreur:

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

J'ai essayé le réglage de la

reqFTP.UsePassive = true; 

propriété sur false, puis je reçois cette erreur:

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

Bien sûr, sans que la propriété EnableSLL soit définie sur true, tout fonctionne sans problème.

Quelqu'un a-t-il une idée à ce sujet?

Edit: Je modifié le code placé comme suit:

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; 

Le ValidateServerCertificate retourne toujours vrai. Après ces modifications, l'effet est nul.

Et je ne comprends pas:

  • En ce moment, l'application utilise le certificat de serveur, non?
  • Et avant que les modifications utilisaient aussi le mien? Est-ce que quelqu'un peut expliquer comment cela fonctionne?

Editer: Après plusieurs échanges de courriels avec la société d'hébergement, il s'est avéré qu'ils avaient des problèmes avec leur logiciel FTP et qu'il n'y avait aucun problème avec le code.

+1

Ensuite, postez votre modification comme réponse et acceptez-la. –

Répondre

1

Avez-vous vérifié si votre hôte utilise FTPS ou SFTP?

Ce sont des protocoles différents et votre hôte peut supposer que vous parliez du mauvais.

+0

Merci pour la réponse. J'ai travaillé avec la société d'hébergement et le problème a été résolu. Il s'est avéré être le cadre de leur environnement. – mosu

+0

^Est-ce que votre environnement d'hébergement se trouve être l'hébergement cloud EC2 Amazon? – D3vtr0n

Questions connexes