「検証手順に従ってリモート証明書が無効です」という例外メッセージが表示され、次のコードが表示されます。
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 over SSL が有効になり、明示的な FTP over TLS を許可するも有効になります。certificate.crt ファイルを生成しました。filezilla クライアントを使用して ftp の場所に接続し、ポップアップ ウィンドウで [常にこの証明書を信頼する] をオンにしました。
MyCertValidationCb メソッドでは、(sslPolicyErrors & SslPolicyErrors.RemoteCertificateChainErrors) == SslPolicyErrors.RemoteCertificateChainErrors は常に true です。
MyCertValidationCb を変更して常に true を返すようにすると、ftp 要求は問題なく通過します。証明書の問題だと思います。誰にもアイデアはありますか?