using System; using System.Collections.Generic; using System.Net; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Text; namespace Apewer.Network { /// public static class SslUtility { /// 证书验证回调。 private static RemoteCertificateValidationCallback ValidationCallback { get { return ServicePointManager.ServerCertificateValidationCallback; } set { ServicePointManager.ServerCertificateValidationCallback = value; } } /// 证书验证。忽略所有错误。 public static bool ApproveAll(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; } /// 证书验证。 public static X509Certificate ApproveFirst(object sender, string targetHost, X509CertificateCollection localCertificates, X509Certificate remoteCertificate, string[] acceptableIssuers) { if (localCertificates != null) { for (var i = 0; i < localCertificates.Count; i++) { var certificate = localCertificates[i]; if (certificate != null) return certificate; } } return null; } /// 证书验证。要求必须有正确的证书。 public static bool ApproveRight(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return (errors == SslPolicyErrors.None) ? true : false; } /// 设置可通用的证书验证回调。 /// 批准所有验证,指定为 FALSE 时将要求系统验证。 public static void ApproveValidation(bool all = true) { if (all) ValidationCallback = new RemoteCertificateValidationCallback(ApproveAll); else ValidationCallback = new RemoteCertificateValidationCallback(ApproveRight); } } }