не удалось подключить FileZilla после включения SSL в FTPWebrequest - PullRequest
1 голос
/ 22 февраля 2012

Я пытался использовать SSL в ftpwebrequest, как показано ниже

  FileStream outputStream = new FileStream(fileName, FileMode.Append);
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpserverIp + "/" + file));
           reqFTP.EnableSsl = true;
            reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
            reqFTP.UseBinary = true;
            reqFTP.KeepAlive = false;
            reqFTP.Timeout = -1;
            reqFTP.UsePassive = true;
            reqFTP.Credentials = new NetworkCredential("sh", "SE");
            FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
            Stream ftpStream = response.GetResponseStream();
            long cl = response.ContentLength;
            // reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
            int bufferSize = 4096;
            int readCount;
            byte[] buffer = new byte[bufferSize];
            readCount = ftpStream.Read(buffer, 0, bufferSize);
            Console.WriteLine("Connected: Downloading File");
            while (readCount > 0)
            {
                outputStream.Write(buffer, 0, readCount);
                readCount = ftpStream.Read(buffer, 0, bufferSize);
                //Console.WriteLine(readCount.ToString());
            }

            ftpStream.Close();
            outputStream.Close();
            response.Close();

Я получил это ниже исключения:

Удаленный сертификат недействителен в соответствии с процедурой проверки.

На основании моего Google удалите часть закрытого ключа в сертификате и начните обработку, теперь он выдает

431 не удалось инициализировать ssl-соединение

Я пробовал гуглить, но пока безрезультатно, парни.

Пытаюсь подключить FileZilla.

Ответы [ 3 ]

1 голос
/ 22 февраля 2012

Ответ прост: FtpWebRequest даже недостаточно хорошо поддерживает FTPS.

Цитируется из http://ftps.codeplex.com/

Класс System.Net.FTPWebRequest, предоставляемый .Net Framework, идеально подходит для простых задач (например, загрузка или выгрузка файла или получение списка каталогов) и поддерживает также SSL через свойство EnableSsl. См .: http://blogs.msdn.com/adarshk/archive/2005/04/22/410925.aspx.Так зачем новый класс для этого?

Дело в том, что поддержка SSL в FTP - это больше, чем включение / выключение (как в HTTP / HTTPS).FTP требует двух отдельных соединений: одно для команд (управляющее соединение) и одно для данных (соединение для передачи данных), для загрузки, выгрузки и списков каталогов.FTPWebRequest.EnableSsl просто заставляет использовать SSL на обоих из них.Проблема в том, что это не всегда подходит.

Microsoft только начинает поддерживать FTPS на стороне сервера, когда они предоставляют FTP 7.5 для Windows Server 2008 и выше.До сих пор они даже не поддерживают FTPS ни в Internet Explorer, ни в Windows Explorer.Неудивительно, что в .NET Framework BCL отсутствует поддержка FTPS.

0 голосов
/ 14 января 2014

Шаг, который вам не хватает, - это установление политики проверки сертификата.

Это делается с помощью следующего кода:

public static bool ValidateCertificate(object sender,
                       X509Certificate certificate, X509Chain chain,
                       SslPolicyErrors sslPolicyErrors) {
   /**
    * validation steps for the certificate go here
    * if you want them, but it may be expedient to 
    * just accept whatever the FTP server gave you.
    * The channel will be encrypted regardless of
    * how trusted the certificate is.
    */
    return true;
}

, а затем настройка указанного выше метода, когдавы получаете проверку сертификата:

ServicePointManager.ServerCertificateValidationCallback = 
    new RemoteCertificateValidationCallback(ValidateCertificate);

Данный пример работает в .NET 3.5, то есть во время принятого в настоящее время ответа утверждение о том, что эта установка была невозможна, уже ошибочно.

0 голосов
/ 22 февраля 2012

В этом сегменте кода: new Uri("ftp://" + ftpserverIp + "/" + file) вы пытаетесь подключиться к ftp-серверу без SSL, который обозначен как «ftp».Смена «ftp: //» на «ftps: //» должна помочь (при условии, что сервер поддерживает SSL.)

...