FtpWebRequest“远程证书根据验证程序无效”

时间:2012-07-20 20:00:07

标签: ssl certificate ftpwebrequest

我有一个.NET客户端应用程序尝试将文件ftp到ftp站点,该站点具有自签名SSL证书。此ftp站点在Windows 7 Enterprise,IIS 7上运行。我收到以下错误:“远程证书根据验证过程无效”。

我已尝试在受信任的根证书中安装证书,但仍然无效。

我在代码中使用了委托回调,这里提到了一些帖子 - 它有效。但我不想在我的生产代码中使用它。

同样在生产中,我们的一些客户使用自签名证书。

有关如何解决此问题的任何想法?

3 个答案:

答案 0 :(得分:0)

如果您尝试连接到IP地址而不是域名,也会出现此错误。由于证书是发给域名的,因此IP地址不起作用。

答案 1 :(得分:0)

@Luca 投票最多的答案盲目接受任何证书。这是一个安全漏洞。

在实施 ServicePointManager.ServerCertificateValidation callback 时,应该验证证书。例如。通过根据已知值检查证书的哈希值:

using System.Net;
using System.Net.Security;
using System.Security.Cryptography;
ServicePointManager.ServerCertificateValidationCallback +=
    (sender, certificate, chain, errors) =>
    {
        return
            (errors == SslPolicyErrors.None) ||
            certificate.GetCertHashString(HashAlgorithmName.SHA256).Equals(
                "EB8E0B28AE064ED58CBED9DAEB46CFEB3BD7ECA67737179E3C85BC3CD09D4EEC");
    };

对于 X509Certificate.GetCertHashString overload that takes HashAlgorithmName.SHA256,您需要 .NET 4.8。在旧版本上使用 the parameter-less overload 返回一个 SHA-1 哈希值。


基于Is it safe to test the X509Certificate.Thumbprint property when you know an invalid certificate is safe?

有关 VB.NET 版本的代码,请参阅 Accept self-signed TLS/SSL certificate in VB.NET

答案 2 :(得分:-1)

我通过.NET遇到了同样的问题,我的帐户甚至本地计算机帐户都信任证书根和链。证书是金色的。

对我来说,我使用了错误的主机名。我使用的是一个完全限定的名称(并且到了正确的位置),但证书实际上是发给了另一个别名。因此,请确保您的服务器名称与完全匹配证书上的内容。

查看这篇文章,这就是我找到答案的方式......也许事件订阅也是你需要的......

http://www.limilabs.com/blog/the-remote-certificate-is-invalid-according-to-the-validation-procedure