我有一个.NET客户端应用程序尝试将文件ftp到ftp站点,该站点具有自签名SSL证书。此ftp站点在Windows 7 Enterprise,IIS 7上运行。我收到以下错误:“远程证书根据验证过程无效”。
我已尝试在受信任的根证书中安装证书,但仍然无效。
我在代码中使用了委托回调,这里提到了一些帖子 - 它有效。但我不想在我的生产代码中使用它。
同样在生产中,我们的一些客户使用自签名证书。
有关如何解决此问题的任何想法?
答案 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 哈希值。
有关 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