Я получаю сообщение об исключении «Удаленный сертификат недействителен в соответствии с процедурой проверки» со следующим кодом:
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 проходит без проблем. Я уверен, что это проблема с сертификатами. У кого-нибудь есть идеи?