ASP.NET невозможно включить SSL с использованием класса FtpWebRequest без получения ошибок - PullRequest
2 голосов
/ 27 июля 2011

Я получаю файл с нашего FTP-сервера, который затем помещается в память и передается клиенту через HTTPS. У меня все работает без нареканий. Однако, если я включаю SSL, я получаю следующую ошибку:

WebException: удаленный сервер возвратил ошибку: (500) синтаксическая ошибка, команда не распознана.]
System.Net.FtpWebRequest.SyncRequestCallback (Object obj) + 330
System.Net.FtpWebRequest.RequestCallback (Object obj) + 23
System.Net.CommandStream.InvokeRequestCallback (Object obj) + 17
System.Net.CommandStream.Abort (исключение e) + 168
System.Net.FtpWebRequest.FinishRequestStage (этап RequestStage) + 454
System.Net.FtpWebRequest.GetResponse () + 1398

Вот мой код:

FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create(@"ftp://" + serverName + ":21/" + fileName);
            ftp.Credentials = new NetworkCredential(userName, password);
            ftp.UseBinary = true;
            ftp.EnableSsl = true;
            ftp.Method = WebRequestMethods.Ftp.DownloadFile;
            FtpWebResponse response = null;
            response = (FtpWebResponse)ftp.GetResponse();

Если я установлю для ftp.EnableSsl значение false или просто закомментирую его, он будет работать нормально. Любые идеи относительно того, что я делаю неправильно. Имейте в виду, я использую Windows XP Professional, используя IIS, встроенный в FTP-сервер. Я отлаживаю из IIS и работаю под https://localhost/projectNameHere/default.aspx.

1 Ответ

1 голос
/ 04 января 2012

Если вы доверяете серверу, вы можете переопределить процесс проверки в соответствии со своими потребностями.

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    System.Diagnostics.Debug.WriteLine(certificate);             
    return true;         
} 

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

...