前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过证书请求Https站点

通过证书请求Https站点

作者头像
写代码的猿
发布2019-04-11 14:41:28
1.1K0
发布2019-04-11 14:41:28
举报
文章被收录于专栏:平凡少年平凡少年

前几天在做与平安银行对接接口,主要是给平安银行推送用户数据(申请贷款的用户),平安银行提供的是https的地址,请求https地址的时候还要发送证书,刚接到这个任务的时候一头雾水,百度上各种所搜,最后还是给解决了。

幸好前几天在博客园里看到一篇文章,给了我很大帮助,地址:http://www.cnblogs.com/caiwenz/p/3913461.html

现在来看程序怎么实现。

首先看一下证书,下图是平安银行接口人给发送的证书,里面的证书有java使用的,有PHP使用的,也有.NET使用,当我打电话向平安银行接口人咨询.NET需要用到那个证书时,对方的回答他也不知道,然后只能去百度了。

其中红色框圈住的是.NET需要的证书

程序实现

代码语言:javascript
复制
public class HttpHelper
    {
       /// <summary>
       /// 证书路径
       /// </summary>
       public string CertificateFilePath { get; set; }
       /// <summary>
       /// 证书密码
       /// </summary>
       public string CertificateFilePwd { get; set; }

       public HttpHelper()
       {
           //ServicePointManager.ServerCertificateValidationCallback += ServerCertificateValidationCallback;//验证服务器证书回调自动验证
       }
       /// <summary>
       /// 发送POST请求
       /// </summary>
       /// <param name="url">请求的地址</param>
       /// <param name="Content">请求的内容</param>
       /// <param name="isLoadCert">是否加载证书</param>
       /// <returns></returns>
       public String Post(String url, String Content, bool isLoadCert)
       {
           string html = "";
           HttpWebRequest webReqst = (HttpWebRequest)WebRequest.Create(url);
           if (isLoadCert)
           {
               //创建证书
               X509Certificate2 cert = CreateX509Certificate2();
               //添加证书认证
               webReqst.ClientCertificates.Add(cert);
           }
           webReqst.Method = "POST";
           webReqst.KeepAlive = true;
           webReqst.ContentType = "application/x-www-form-urlencoded";
           try
           {
               byte[] data = Encoding.Default.GetBytes(Content);
               webReqst.ContentLength = data.Length;
               Stream stream = webReqst.GetRequestStream();
                   stream.Write(data, 0, data.Length);
                   HttpWebResponse webResponse = (HttpWebResponse)webReqst.GetResponse();
                   if (webResponse.StatusCode == HttpStatusCode.OK && webResponse.ContentLength < 1024 * 1024)
                   {
                       StreamReader reader = new StreamReader(webResponse.GetResponseStream(), Encoding.Default);
                       html = reader.ReadToEnd();
                   }
           }
           catch(Exception ex)
           {
               throw ex;
           }

           return html;
       }

        /// <summary>
        /// 创建证书
        /// </summary>
        /// <returns>X509Certificate2对象</returns>
        public X509Certificate2 CreateX509Certificate2()
        {
            X509Certificate2 cert = null;
            try
            {
                cert = new X509Certificate2(CertificateFilePath, CertificateFilePwd);
                ServicePointManager.ServerCertificateValidationCallback =
                    new RemoteCertificateValidationCallback(ServerCertificateValidationCallback);
            }
            catch (Exception ex)
            {
                throw ex;  
            }
            return cert;
        }

       /// <summary>
       /// 验证证书的回调函数
       /// </summary>
       /// <param name="obj"></param>
       /// <param name="cer"></param>
       /// <param name="chain"></param>
       /// <param name="error"></param>
       /// <returns></returns>
        private bool ServerCertificateValidationCallback(object obj, X509Certificate cer, X509Chain chain, System.Net.Security.SslPolicyErrors error)
        {
            return true;
        }
    }

程序比较简单了,主要是请求证书,以前没搞过。

调用

1、把证书放在电脑的一个盘中,记录.pfx证书的路径,还需要知道证书的密码

2、调用

代码语言:javascript
复制
   <!-- 平安银行证书路径-->
    <add key="CertificateFilePath" value="D:\证书\证书\store.pfx" />
    <!-- 平安银行证书密码-->
    <add key="CertificateFilePwd" value="XXXX" />
    <!--平安银行请求的地址-->
    <add key="PingAnUrl" value="https://XXXX7" />
代码语言:javascript
复制
 HttpHelper helper = new HttpHelper();
                    helper.CertificateFilePath = WindowsServiceCommon.GetConfigSetting("CertificateFilePath");  //ConfigurationManager.AppSettings["CertificateFilePath"].ToString();
                    helper.CertificateFilePwd = WindowsServiceCommon.GetConfigSetting("CertificateFilePwd");  //ConfigurationManager.AppSettings["CertificateFilePwd"].ToString();
                    var html = helper.Post(WindowsServiceCommon.GetConfigSetting("PingAnUrl"), XmlContent, true);

 这样就成功的吧数据Post到指定的地址上。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-08-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
SSL 证书
腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档