FtpWebRequest EnableSSL错误

时间:2010-09-07 20:45:24

标签: ssl ftpwebrequest

我收到“远程证书根据验证程序无效”异常消息,代码如下:

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请求会顺利通过。我确定这是证书的问题。有人有什么想法吗?

1 个答案:

答案 0 :(得分:2)

RemoteCertificateChainErrors是在受信任的根证书颁发机构证书存储区中没有证书的结果。

Filezilla使用以下格式生成自签名证书:

-----开始RSA私钥-----

//散列

----- END RSA私钥-----

----- BEGIN CERTIFICATE -----

//散列

----- END CERTIFICATE -----

要导入证书,请删除私钥部分并保存新文件。将其安装到受信任的根证书颁发机构证书存储区。

现在我遇到的问题是RemoteCertificateNameMismatch,我会在另一个话题中发布。