Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.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
C# System.Net.CertificatePolicy到服务器CertificateValidationCallback接受所有证书策略_C#_.net_Ssl Certificate_X509certificate - Fatal编程技术网

C# System.Net.CertificatePolicy到服务器CertificateValidationCallback接受所有证书策略

C# System.Net.CertificatePolicy到服务器CertificateValidationCallback接受所有证书策略,c#,.net,ssl-certificate,x509certificate,C#,.net,Ssl Certificate,X509certificate,我下载了一些有点过时的示例代码。它有以下类别: public class TrustAllCertificatePolicy : System.Net.ICertificatePolicy { public TrustAllCertificatePolicy() { } public bool CheckValidationResult(ServicePoint sp, System.Security.Cryptography.X509Cer

我下载了一些有点过时的示例代码。它有以下类别:

public class TrustAllCertificatePolicy : System.Net.ICertificatePolicy
{
    public TrustAllCertificatePolicy()
    { }

    public bool CheckValidationResult(ServicePoint sp,
              System.Security.Cryptography.X509Certificates.X509Certificate cert,
              WebRequest req, 
              int problem)
    {
        return true;
    }
}
稍后在代码中,它调用以下内容:

System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
它给出了以下警告:

警告1“System.Net.ServicePointManager.CertificatePolicy”已过时:“此类型的CertificatePolicy已过时,请改用ServerCertificateValidationCallback。”

实现等效功能的当前程序是什么


我读过MSDN上的一篇文章,但我不确定如何转换?这是一个类库。如果我似乎没有对此进行足够的研究,我对此表示歉意,但当涉及到ssl证书时,这有点超出了我的范围。非常感谢您的帮助

在代码中包含以下类

 public static class SSLValidator
        {
            private static bool OnValidateCertificate(object sender, X509Certificate certificate, X509Chain chain,
                                                      SslPolicyErrors sslPolicyErrors)
            {
                return true;
            }
            public static void OverrideValidation()
            {
                ServicePointManager.ServerCertificateValidationCallback =
                    OnValidateCertificate;
                ServicePointManager.Expect100Continue = true;
            }
        }
然后在进行服务调用之前调用以下代码,但当您有真正的证书时,请小心在生产中删除此代码

SSLValidator.OverrideValidation();  
或者,您可以执行以下操作,仅将其用于调试

#if DEBUG

            SSLValidator.OverrideValidation();
#endif 

当连接到其他web服务时,我使用以下命令

//workaround for SSL certificate issue
ServicePointManager.ServerCertificateValidationCallback = 
  (sender, certificate, chain, sslPolicyErrors) => { return true; };
根据我需要添加到简介中的评论-不要在生产中这样做
(如果有-请将500美元发送到我的paypal帐户)

此解决方案对应用程序没有任何负面影响。谢谢你的回答。你介意解释一下“SSLValidator”类的最后一行代码吗。“ServicePointManager.Expect100Continue”部分。什么是“继续”?你在这里有详细的解释。这是一个清晰、简洁的答案,帮助我摆脱了类似的困境。谢谢Dan。@DanHunex谢谢这对在PowerShell中使用也很有帮助。我对它做了一些修改,这样结果就可以撤销了,我已经完成了。我已经链接到这个答案,但是如果你有一个网站或其他东西,我可以链接让我知道。看起来我们使用相同的示例代码,谢谢你的提问:)这是一个重大的安全风险。检查你上面的答案。@OriNachum你完全正确。这不应用于生产。这只是为了在开发环境中入门。请编辑它,以便它澄清这仅用于开发环境,以避免混淆初学者