无法从Dropbox下载文件,因为无法通过C#中的WebClient与SSL / TLS通道连接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法从Dropbox下载文件,因为无法通过C#中的WebClient与SSL / TLS通道连接相关的知识,希望对你有一定的参考价值。

尝试使用WebClient.DownloadFile()将可执行文件从Dropbox的私人文件夹下载到Windows服务中的PC。但它正在抛出错误底层连接已关闭:无法为SSL / TLS安全通道建立信任关系。

我们所遇到的是,错误仅发生在Windows XP(SP2)中,而不发生在Windows 7,8和8.1中。 (尚未在XP SP3和Vista中测试过。)

试过:

  • WebClient.UseDefaultCredentialstrue
  • WebClient.Credentials = CredentialCache.DefaultNetworkCredentialsCredentialCache.DefaultCredentials
  • http://在URL而不是https://
答案

好吧,我自己解决了。得到更多选票的this StackOverflow question的答案帮助我解决了这个问题。

我的样本如下:

public static void DownloadFileFromDropbox(string dropboxUrl, string file_name)
    WebClient webclient = null;
    try
    {
        webclient = new WebClient();

        ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidRemoteCertificate);

        if (File.Exists(UpdatesDirStr + file_name))
        {
            File.Delete(UpdatesDirStr + file_name);
        }
        webclient.DownloadFile(dropboxUrl, UpdatesDirStr + file_name);
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        if (webclient != null)
        {
            webclient.Dispose();
            webclient = null;
        }
    }
}

private static bool ValidRemoteCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    if (certificate.Subject.Contains("dropboxusercontent.com"))
    {
        return true;
    }
    else if (certificate.Subject.Contains("dropbox.com"))
    {
        return true;
    }
    return false;
}

我仍然想知道它是如何正常工作的?因为new RemoteCertificateValidationCallback(ValidRemoteCertificate)没有从任何地方采取dropboxUrl。那么X509Certificate certificate方法中的ValidRemoteCertificate param如何从Dropbox.com获得正确的证书?

以上是关于无法从Dropbox下载文件,因为无法通过C#中的WebClient与SSL / TLS通道连接的主要内容,如果未能解决你的问题,请参考以下文章

国外的dropbox邮件链接为什么一开始会

企业版不通过服务器安装,但可以通过 Dropbox 安装

Dropbox.Api 无法上传大文件

dropbox 被封,在hosts文件中修改对应ip是怎么改的?

手机无法登陆dropbox

dropbox官网无法访问怎么办