我收到“远程证书根据验证程序无效”异常消息,代码如下:
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请求会顺利通过。我确定这是证书的问题。有人有什么想法吗?
答案 0 :(得分:2)
RemoteCertificateChainErrors是在受信任的根证书颁发机构证书存储区中没有证书的结果。
Filezilla使用以下格式生成自签名证书:
-----开始RSA私钥-----
//散列
----- END RSA私钥-----
----- BEGIN CERTIFICATE -----
//散列
----- END CERTIFICATE -----
要导入证书,请删除私钥部分并保存新文件。将其安装到受信任的根证书颁发机构证书存储区。
现在我遇到的问题是RemoteCertificateNameMismatch,我会在另一个话题中发布。