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

时间:2013-08-26 22:48:31

标签: c# .net ssl-certificate x509certificate

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

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上看过article,但我不确定如何转换?这是一个类库。我道歉,如果我似乎没有研究这个,但是当涉及到ssl证书时,它有点超出了我的境界。非常感谢任何帮助!

2 个答案:

答案 0 :(得分:16)

在您的代码中包含以下类

 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 

答案 1 :(得分:3)

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

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

每个评论我需要添加到模糊 - 不要在生产中这样做 (如果你这样做 - 请将500美元发送到我的paypal账户)