Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net FtpWebRequest“;根据验证程序,“远程证书无效”;_.net_Ssl_Certificate_Ftpwebrequest - Fatal编程技术网

.net FtpWebRequest“;根据验证程序,“远程证书无效”;

.net FtpWebRequest“;根据验证程序,“远程证书无效”;,.net,ssl,certificate,ftpwebrequest,.net,Ssl,Certificate,Ftpwebrequest,我有一个.NET客户端应用程序,它尝试通过文件ftp到具有自签名SSL证书的ftp站点。此ftp站点正在Windows 7企业版IIS 7上运行。我收到以下错误:“根据验证过程,远程证书无效” 我已尝试在受信任的根证书中安装证书,但仍然不起作用 我在这里的一些帖子中提到的代码中使用了委托回调——它是有效的。但我不想在我的生产代码中使用它 此外,在生产过程中,我们的一些客户正在使用自签名证书 关于如何解决这个问题有什么想法吗?我通过.NET遇到了同样的问题,证书根目录和证书链受到我的帐户甚至本地计

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

我已尝试在受信任的根证书中安装证书,但仍然不起作用

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

此外,在生产过程中,我们的一些客户正在使用自签名证书


关于如何解决这个问题有什么想法吗?

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

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

看看这篇文章,我就是这样找到答案的。。。也许你也需要订阅活动


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

您必须覆盖证书检查,以便它们始终被认为是良好的。 这不会阻止通道保持SSL保护

uritarget=新的Uri(“ftp://yourUri");
字符串文件名=@“FullPathFyourFile”;
FtpWebRequest=(FtpWebRequest)WebRequest.Create(目标);
request.Method=WebRequestMethods.Ftp.UploadFile;
request.Credentials=新的网络凭据(“用户”、“密码”);
request.enablesl=true;
//覆盖证书检查
ServicePointManager.ServerCertificateValidationCallback=
(s、证书、链、sslPolicyErrors)=>真;
//将文件内容复制到请求流
//....

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

在实现时,应该验证证书。例如,通过对照已知值检查证书的哈希:

using System.Net;
using System.Net.Security;
using System.Security.Cryptography;
对于,您需要.NET4.8。在旧版本上,使用返回SHA-1哈希的


基于


有关VB.NET版本的代码,请参见。

结果表明我也遇到了类似的问题。FtpWebRequest使用的是一个IP地址(“1.2.3.4”),当然证书是颁发给域名(“*.example.com”)的通配符。一旦我在FtpWebSession中切换到使用域名,这个错误就消失了。虽然这个“有效”,但它并不安全。您应该验证证书,而不是盲目地接受任何证书。有关验证证书的方法,请参阅。
ServicePointManager.ServerCertificateValidationCallback +=
    (sender, certificate, chain, errors) =>
    {
        return
            (errors == SslPolicyErrors.None) ||
            certificate.GetCertHashString(HashAlgorithmName.SHA256).Equals(
                "EB8E0B28AE064ED58CBED9DAEB46CFEB3BD7ECA67737179E3C85BC3CD09D4EEC");
    };