WebRequest с использованием SSL - PullRequest
4 голосов
/ 15 июня 2010

У меня есть следующий код для извлечения файла с использованием FTP (который отлично работает).

            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(svrPath);

            request.KeepAlive = true;
            request.UsePassive = true;
            request.UseBinary = true;

            request.Method = WebRequestMethods.Ftp.DownloadFile;
            request.Credentials = new NetworkCredential(uname, passw);

            using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
            using (Stream responseStream = response.GetResponseStream())
            using (StreamReader reader = new StreamReader(responseStream))
            using (StreamWriter destination = new StreamWriter(destinationFile))
            {
                destination.Write(reader.ReadToEnd());
                destination.Flush();
            }

Однако, когда я пытаюсь сделать это с помощью SSL, я не могу получить доступ к файлу, как показано ниже:

            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(svrPath);

            request.KeepAlive = true;
            request.UsePassive = true;
            request.UseBinary = true;

            // The following line causes the download to fail
            request.EnableSsl = true;

            request.Method = WebRequestMethods.Ftp.DownloadFile;
            request.Credentials = new NetworkCredential(uname, passw);

            using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
            using (Stream responseStream = response.GetResponseStream())
            using (StreamReader reader = new StreamReader(responseStream))
            using (StreamWriter destination = new StreamWriter(destinationFile))
            {
                destination.Write(reader.ReadToEnd());
                destination.Flush();
            }

Может кто-нибудь сказать мне, почему последний не будет работать?

EDIT:

Я получаю следующее исключение:

The remote server returned an error: (530) Not logged in.

Ответы [ 2 ]

8 голосов
/ 13 июля 2010

Где вы проверяете сертификат SSL?Выполнение SSL через FTP-соединение не так просто, как установка свойства .EnableSsl.Вам необходимо предоставить метод проверки сертификата.См. эту статью для кода C #, чтобы делать то, что вы хотите.Кроме того, кто-то скопировал и вставил весь свой класс FTP в этой статье MSDN , если вам нужна более детальная реализация.

Чтобы быстро приступить к работе, протестируйте его с помощью:

if (request.EnableSsl) ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

, а затем позже:

public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) {
 return true; // Read the links provided above for real implementation
}
0 голосов
/ 13 июля 2010

Попробуйте этот запрос FtpWebRequest = (FtpWebRequest) FtpWebRequest.Create (svrPath);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...