C# 尝试使用FtpWebRequest c与FTPS连接时引发异常-调用SSPI失败,请参阅内部异常;

C# 尝试使用FtpWebRequest c与FTPS连接时引发异常-调用SSPI失败,请参阅内部异常;,c#,.net,ftpwebrequest,ftps,C#,.net,Ftpwebrequest,Ftps,我正在尝试更新一些FTP代码,因为我连接的服务器现在正在强制使用FTPS 我得到的例外情况如下: 消息=调用SSPI失败,请参阅内部异常 我用于连接的代码如下所示: public bool CheckFtpFile(string aFolderName, string aFileName) { FtpWebRequest request; string absoluteFileName = Path.GetFileName(aFileName); request =

我正在尝试更新一些FTP代码,因为我连接的服务器现在正在强制使用FTPS

我得到的例外情况如下:

消息=调用SSPI失败,请参阅内部异常

我用于连接的代码如下所示:

public bool CheckFtpFile(string aFolderName, string aFileName)
{

    FtpWebRequest request;
    string absoluteFileName = Path.GetFileName(aFileName);


    request = WebRequest.Create(new Uri(string.Format(@"ftp://{0}/{1}/{2}", ftpServer, aFolderName, absoluteFileName))) as FtpWebRequest;
    request.Credentials = new NetworkCredential(userName, passWord);
    request.EnableSsl = true;
    request.Method = WebRequestMethods.Ftp.GetDateTimestamp;
    request.UseBinary = true;
    request.UsePassive = true;

    //Line added as hack
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

    try
    {
        FtpWebResponse response = (FtpWebResponse)request.GetResponse();
    }
    catch (WebException ex)
    {
        FtpWebResponse response = (FtpWebResponse)ex.Response;
        if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
        {
            return false;
        }
    }
    return true;
}
为了忽略证书,我使用以下命令:

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    System.Diagnostics.Debug.WriteLine(certificate);             
    return true;         
} 
有人能解释一下导致异常的原因吗

编辑: 内部异常显示为: {“收到的消息意外或格式错误”}


我目前正在使用.Net Franework 4.0-问题是否与服务器被限制为TLS 1.2加密有关?

嗯,错误消息说查看了
内部异常
。这些信息可能是解决您的问题的关键,但您尚未提供。请将
InnerException
详细信息添加到您的问题中。@BenVoigt-感谢您的指点,我已经添加了上面的innereCeption-我不确定该如何理解它。听起来很难理解,不幸的是,我对.NET库的这一特定部分没有经验。包含
InnerException
中的堆栈跟踪可能会提供一些关于当时正在处理的消息类型的进一步线索。我想你也应该做一些数据包捕获(wireshark或同等产品)——如果失败发生在加密协商之前,它们可能非常有用;(