2010-02-09 4 views
1

En utilisant le code suivant, l'application Mon client se connecte au serveur FTP sécurisé et pousse le fichier vers le haut avec succès. Pensez-vous que l'approche suivante quitte toujours le trou de sécurité en acceptant tous les certificats. Si oui, quelqu'un peut-il m'aider à passer le certificat spécifique du client que j'ai sur le serveur FTP.comment utiliser FTP SSL C#?

public bool UploadFile(string FileName) 
     { 
      string ftpServerIP = FTPServer; 
      string ftpUserID = FTPUser; 
      string ftpPassword = FTPPwd; 
      FileInfo fileInf = new FileInfo(FileName); 
      string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name; 
      FtpWebRequest reqFTP; 

      // Create FtpWebRequest object from the Uri provided 
      reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri); //new Uri("ftp://" + ftpServerIP + DestinationFolder + fileInf.Name)); 

      //Enable SSL 
      reqFTP.EnableSsl = true; 

      // Provide the WebPermission Credintials 
      reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); 

      // By default KeepAlive is true, where the control connection is not closed after a command is executed. 
      reqFTP.KeepAlive = false; 

      //reqFTP.UsePassive = true; 

      // Specify the command to be executed. 
      reqFTP.Method = WebRequestMethods.Ftp.UploadFile; 

      //SSL Certificate 
      ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications); 

      // Specify the data transfer type. 
      reqFTP.UseBinary = true; 

      // Notify the server about the size of the uploaded file 
      reqFTP.ContentLength = fileInf.Length; 

      // The buffer size is set to 2kb 
      int buffLength = 2048; 
      byte[] buff = new byte[buffLength]; 
      int contentLen; 

      // Opens a file stream (System.IO.FileStream) to read the file to be uploaded 
      FileStream fs = fileInf.OpenRead(); 
      try 
      { 
       // Stream to which the file to be upload is written 
       Stream strm = reqFTP.GetRequestStream(); 

       // Read from the file stream 2kb at a time 
       contentLen = fs.Read(buff, 0, buffLength); 

       // Till Stream content ends 
       while (contentLen != 0) 
       { 
        // Write Content from the file stream to the FTP Upload Stream 
        strm.Write(buff, 0, contentLen); 
        contentLen = fs.Read(buff, 0, buffLength); 
       } 

       // Close the file stream and the Request Stream 
       strm.Close(); 
       fs.Close(); 
       return true; 
      } 
      catch (Exception ex) 
      { 
       return false; 
      } 

     } 

public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) 
     { 

      return true; 
     } 
+0

des suggestions s'il vous plaît? – Jango

Répondre

0

Si vous faites confiance au serveur FTP que vous transférez vos données, alors je ne voient pas de vrais problèmes avec le contournement de la validation du certificat du serveur. Toutefois, si vous souhaitez valider le certificat de serveur à partir du serveur FTP, reportez-vous au lien que ce dernier a publié et qui contient un exemple de validation d'un certificat de serveur.

Questions connexes