2

我正在从我们的 FTP 服务器检索一个文件,然后将该文件放入内存并通过 HTTPS 传递给客户端。我的一切工作完美无缺。但是,如果我打开 SSL,我会收到以下错误:

WebException:远程服务器返回错误:(500) 语法错误,命令无法识别。]
System.Net.FtpWebRequest.SyncRequestCallback(Object obj) +330
System.Net.FtpWebRequest.RequestCallback(Object obj) +23
System.Net.CommandStream .InvokeRequestCallback(Object obj) +17
System.Net.CommandStream.Abort(Exception e) +168
System.Net.FtpWebRequest.FinishRequestStage(RequestStage 阶段) +454
System.Net.FtpWebRequest.GetResponse() +1398

这是我的代码:

FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create(@"ftp://" + serverName + ":21/" + fileName);
            ftp.Credentials = new NetworkCredential(userName, password);
            ftp.UseBinary = true;
            ftp.EnableSsl = true;
            ftp.Method = WebRequestMethods.Ftp.DownloadFile;
            FtpWebResponse response = null;
            response = (FtpWebResponse)ftp.GetResponse();

如果我将 ftp.EnableSsl 设置为 false 或者只是将其注释掉,它就可以正常工作。关于我做错了什么的任何想法。请记住,我在使用 IIS 内置 FTP 服务器的 Windows XP Professional 机器上。我正在从 IIS 调试,并且在https://localhost/projectNameHere/default.aspx下运行。

4

1 回答 1

1

如果您信任服务器,则可以根据需要覆盖验证过程。

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    System.Diagnostics.Debug.WriteLine(certificate);             
    return true;         
} 

您的连接和数据仍然是安全的。如果您不信任源代码,则不应使用此代码,因为源代码可能是冒名顶替者。

于 2012-01-04T15:15:19.543 回答