zoukankan      html  css  js  c++  java
  • .net core 调用数字证书 使用X509Certificate2

     .NET下面的 .netfromwork使用和asp.net core下使用方式不一样

    配置文件中代码:

            public const string API_URL = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
    ///
    <summary> /// 本地或者服务器的证书位置 /// </summary> public const string CertPath = @"D:apiclient_cert.p12"; /// <summary> /// 本地或者服务器的证书密码 /// </summary> public const string CApassword = "9999999";
    Build_Content()
      这个主要是传递的参数封装值
     public async Task<bool> Send_Transfer()
            {
                //HttpClient请求,在handler里添加X509Certificate2 证书,数据data是byte[] 类型,所以需要使用ByteArrayContent传入
                var handler = new HttpClientHandler();
                handler.ClientCertificateOptions = ClientCertificateOption.Manual;
                handler.SslProtocols = SslProtocols.Tls12;
                //获取证书路径
                //商户私钥证书,用于对请求报文进行签名
                try
                {
                    handler.ClientCertificates.Add(new X509Certificate2(WeixinPay.CertPath, WeixinPay.CApassword, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet));
                }
                catch (Exception e)
                {
                    _logger.LogError(e.Message);
                }
                handler.SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls;
                handler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true;
                //post请求
                var client = new HttpClient(handler);
                /////////////////////////////////////////////////////////// 
                //以下属于在.netfromwork环境下写法
               // ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                //调用证书
                //X509Certificate2 cer = new X509Certificate2(WeixinPay.CertPath, WeixinPay.CApassword, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);
                //handler.ClientCertificates.Add(cer);
                ///////////////////////////////////////////////////////////
                response = await client.PostAsync(WeixinPay.API_URL, Build_Content());
                ///////////////////////////////////////////////////////////
                return response.IsSuccessStatusCode;
            }
  • 相关阅读:
    关于requests.exceptions.SSLError: HTTPSConnectionPool(host='XXX', port=443)问题
    python Requests库总结
    fiddler实现手机抓包及手机安装证书报错“无法安装该证书 因为无法读取该证书文件”解决方法
    django接口的工作原理
    postman+newman+jenkins 持续集成搭建及使用,实现接口自动化
    Jmeter之JDBC Request及参数化
    selenium+Python中的面试总结
    UI自动化测试:页面截图的3种方法
    selenium中通过location和size定位元素坐标
    Allure+pytest生成测试报告
  • 原文地址:https://www.cnblogs.com/Warmsunshine/p/8250507.html
Copyright © 2011-2022 走看看