using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
namespace iWareCommon.Utils
{
    public static class SSLUtil
    {
        public static void SetCertificatePolicy_New()
        {
            //当在浏览器中可以正常访问,而code中出现错误时,可以用fiddle看下正常访问的SSl加密认证的版本号
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            ServicePointManager.ServerCertificateValidationCallback =
                new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);
        }
        public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
        {
            return true;
        }
        /// 
        /// Sets the cert policy.
        /// 
        public static WebRequestHandler SetCertificatePolicy2()
        {
            var handler = new WebRequestHandler();
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
            handler.ServerCertificateValidationCallback += RemoteCertificateValidate;
            return handler;
        }
        /// 
        /// Sets the cert policy.
        /// 
        public static HttpClientHandler SetCertificatePolicy3()
        {
            HttpClientHandler clientHandler = new HttpClientHandler();
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
            //clientHandler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; };
            return clientHandler;
        }
        /// 
        /// Sets the cert policy.
        /// 
        public static void SetCertificatePolicy()
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
            ServicePointManager.ServerCertificateValidationCallback
                       += RemoteCertificateValidate;
        }
        /// 
        /// Remotes the certificate validate.
        /// 
        private static bool RemoteCertificateValidate(
           object sender, X509Certificate cert,
            X509Chain chain, SslPolicyErrors error)
        {
            // trust any certificate!!!
            System.Console.WriteLine("Warning, trust any certificate");
            return true;
        }
    }
}