问题 System.Net.CertificatePolicy到ServerCertificateValidationCallback接受所有证书策略


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

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。 http://go.microsoft.com/fwlink/?linkid=14202

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

我读过一篇 文章 在MSDN上但我不确定如何转换?这是一个类库。我道歉,如果我似乎没有对此进行过充分的研究,但是当涉及到ssl证书时,它有点超出了我的境界。任何帮助是极大的赞赏!


9669
2017-08-26 22:48


起源

看起来我们使用相同的示例代码,谢谢你问:) - CularBytes


答案:


在代码中包含以下类

 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 

15
2017-08-26 23:01



该解决方案对应用程序没有任何负面影响。谢谢你的回答。 - Oxymoron
您是否介意在“SSLValidator”类中解释最后一行代码。 'ServicePointManager.Expect100Continue'部分。什么是'Expect100Continue'? - Oxymoron
你在这里有详细的解释 msdn.microsoft.com/en-us/library/... - Dan Hunex
这是一个清晰,简洁的答案,帮助我摆脱了类似的堵塞。谢谢丹。 - Magua
@DanHunex感谢这对于在PowerShell中使用非常有帮助。我修改了一下,以便结果可以撤消,我已经 写了一篇关于它的简短博文。我已经链接到这个答案,但如果您有一个网站或其他我可以链接的东西让我知道。 - briantist


连接到其他Web服务时,我使用以下内容。

//workaround for SSL certificate issue
ServicePointManager.ServerCertificateValidationCallback = 
  (sender, certificate, chain, sslPolicyErrors) => { return true; };

每个评论我需要添加到模糊 - 在这个生产中不要这样做 (如果你这样做 - 请发送$ 500给我的paypal accouunt')}K%JWE + \ 53; LRn`')


1
2017-07-03 19:15



这是一个主要的安全风险。检查上面的答案。 - Ori Nachum
@OriNachum你是绝对正确的。这不应该用于生产。它只是为了在开发环境中入门。 - BozoJoe
请编辑它,以便澄清这仅适用于开发环境,以避免混淆启动开发人员 - Ori Nachum