Ошибка FtpWebRequest EnableSSL - PullRequest
       7

Ошибка FtpWebRequest EnableSSL

1 голос
/ 08 сентября 2010

Я получаю сообщение об исключении «Удаленный сертификат недействителен в соответствии с процедурой проверки» со следующим кодом:

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(MyCertValidationCb);

var request = (FtpWebRequest)WebRequest.Create(new Uri(myUri));
request.EnableSsl = true;
request.Method = WebRequestMethods.Ftp.UploadFile;
request.BeginGetRequestStream(EndGetStreamCallback, _state);


public static bool MyCertValidationCb(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    if ((sslPolicyErrors & SslPolicyErrors.RemoteCertificateChainErrors)
              == SslPolicyErrors.RemoteCertificateChainErrors)
    {
        return false;
    }
    if ((sslPolicyErrors & SslPolicyErrors.RemoteCertificateNameMismatch)
        == SslPolicyErrors.RemoteCertificateNameMismatch)
    {
        Zone z;
        z = Zone.CreateFromUrl(((FtpWebRequest)sender).RequestUri.ToString());
        if (z.SecurityZone == SecurityZone.Intranet
            || z.SecurityZone == SecurityZone.MyComputer)
        {
            return true;
        }
        return false;
    }
    return false;
} 

ftp-сервер - filezilla. FTP через SSL включен, и Разрешить явный FTP через TLS также включен. Я сгенерировал файл certificate.crt. Подключился к FTP-серверу с помощью клиента filezilla и установил флажок «Всегда доверять этому сертификату» во всплывающем окне.

В методе MyCertValidationCb (sslPolicyErrors & SslPolicyErrors.RemoteCertificateChainErrors) == SslPolicyErrors.RemoteCertificateChainErrors всегда имеет значение true.

Если я изменю MyCertValidationCb, чтобы он всегда возвращал true, запрос ftp проходит без проблем. Я уверен, что это проблема с сертификатами. У кого-нибудь есть идеи?

1 Ответ

2 голосов
/ 08 сентября 2010

RemoteCertificateChainErrors был результатом отсутствия сертификата в хранилище сертификатов доверенных корневых центров сертификации.

Filezilla создает самозаверяющий сертификат в следующем формате:

-----НАЧАЛО RSA ЧАСТНЫЙ КЛЮЧ -----

// hash

----- КОНЕЦ ЧЕРНЫЙ КЛЮЧ RSA -----

----- НАЧАТЬСЕРТИФИКАТ -----

// хэш

----- КОНЕЦ СЕРТИФИКАТ -----

Чтобы импортировать сертификат, удалите закрытый ключраздел и сохраните новый файл.Установите это в хранилище сертификатов доверенных корневых центров сертификации.

Теперь у меня возникла проблема с RemoteCertificateNameMismatch, я опубликую это в другой теме.

...