通过证书请求Https站点
前几天在做与平安银行对接接口,主要是给平安银行推送用户数据(申请贷款的用户),平安银行提供的是https的地址,请求https地址的时候还要发送证书,刚接到这个任务的时候一头雾水,百度上各种所搜,最后还是给解决了。
幸好前几天在博客园里看到一篇文章,给了我很大帮助,地址:http://www.cnblogs.com/caiwenz/p/3913461.html
现在来看程序怎么实现。
首先看一下证书,下图是平安银行接口人给发送的证书,里面的证书有java使用的,有PHP使用的,也有.NET使用,当我打电话向平安银行接口人咨询.NET需要用到那个证书时,对方的回答他也不知道,然后只能去百度了。
其中红色框圈住的是.NET需要的证书

程序实现
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, , data.Length);
HttpWebResponse webResponse = (HttpWebResponse)webReqst.GetResponse();
if (webResponse.StatusCode == HttpStatusCode.OK && webResponse.ContentLength < * )
{
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、调用
<!-- 平安银行证书路径-->
<add key="CertificateFilePath" value="D:\证书\证书\store.pfx" />
<!-- 平安银行证书密码-->
<add key="CertificateFilePwd" value="XXXX" />
<!--平安银行请求的地址-->
<add key="PingAnUrl" value="https://XXXX7" />
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到指定的地址上。
通过证书请求Https站点的更多相关文章
- PHP使用curl请求https站点的常见错误及解决方案
使用curl请求http站点和https站点最大的不同就是https站点有证书验证这一环节,如果证书验证不通过则无法发起请求,不管是请求什么类型的站点遇到问题时先把错误码打印出来看一下,打印错误码的代 ...
- SSL证书部署HTTPS站点Apache/Nginx配置
SSL证书及HTTPS协议 SSL 证书是一种数字证书,它使用 Secure Socket Layer 协议在浏览器和 Web 服务器之间建立一条安全通道,从而实现:1.数据信息在客户端和服务器之间的 ...
- Win7下 httpRequest带证书请求https网站
常规情况下创建Web请求,并获取请求数据的代码如下: WebRequest req = WebRequest.Create(url); req.Timeout = 15000; WebResponse ...
- IIS 使用OpenSSL 生成的自签名证书,然后使用SingalR 客户端访问Https 站点通信
使用SignalR 的客户端去发送消息给使用 https 部署的站点,官方文档目前并没有详细的教程,所以在此记录下步骤: 使用管理员身份打开cmd 窗口,选择一个整数保存文件夹的地址,切换到对应的文件 ...
- C#检测并安装https站点的数字证书,CefSharp和HttpWebRequest通过会话Cookie实现自动登录访问https站点
HttpUtil工具类: using System; using System.Collections.Generic; using System.IO; using System.Linq; usi ...
- requests访问https站点证书告警问题
背景 想使用api的方式去访问公司内部azkaban平台,https站点,azkaban的官方api文档使用的curl语句,如下: curl -k -X POST --data "actio ...
- [转]在 .NET 中远程请求 https 内容时,发生错误:根据验证过程,远程证书无效
该文原网址:http://www.cnblogs.com/xwgli/p/5487930.html 在 .NET 中远程请求 https 内容时,发生错误:根据验证过程,远程证书无效. 当访问 h ...
- AFNetWorking3.0使用 自签名证书的https请求
前几日,项目组出于安全角度的考虑,要求项目中的请求使用https请求,因为是企业内部使用的app,因此使用了自签名的证书,而自签名的证书是不受信任的,所以我们就需要自己来做证书的验证,包括服务器验证客 ...
- curl+个人证书(又叫客户端证书)访问https站点
摘自http://blog.csdn.net/chary8088/article/details/22990741 curl+个人证书(又叫客户端证书)访问https站点 目前,大公司的OA管理系统( ...
随机推荐
- Javascript组成--ECMAScript,DOM,BOM
ECMAScript 部分 ECMAScript是一个标准,JS只是它的一个实现,其他实现包括ActionScript; “ECMAScript可以为不同种类的宿主环境提供核心的脚本编程能力”,即EC ...
- sql中with as测试实例
一.使用场景 1.多处使用才有必要2.一方面减少代码数量便于理解维护3.一方面跟代码一样一次计算到处用 二.实例(本处示例仅为测试,实际用join比较好) 1.不使用with as 2.使用with ...
- 利用springloaded进行java jar&class的动态替换
之前已经写过一篇关于class的动态替换博客,今天我们来介绍一下如何用springloaded进行jar&class的动态替换. 首先说一下实验过程,结合了目前我正在做的项目,这个项目是一个前 ...
- .net 简单任务调度平台安装简要说明
.net 简单任务调度平台,用于.net dll,exe的任务的挂载,任务的隔离,调度执行,访问权限控制,监控,管理,日志,错误预警,性能分析等. 平台基于quartz.net进行任务调度功能开发,采 ...
- 重写comparater比较器
TreeSet 能自动对对象进行排序,但是一般需要在类中重写比较方法 比较器介绍 在类中实现Comparable接口,并重写compareTo方法 排序对象类 package typing.overr ...
- Pycharm配置
平台:win10 x64 Pycharm的下载,安装,破解,编辑字体+配置IDE 详见博客:https://blog.csdn.net/yctjin/article/details/70307933? ...
- delphi 中OutputDebugString 函数的妙用(转载)
原文地址 https://www.peganza.com/delphi-and-outputdebugstring.html Ever wanted to monitor your Delphi ap ...
- Mybatis的针对于同一个有自己父类或子类的递归查询 (如商品分类)
1.pojo代码 private Integer categoryId; private Integer superId; private String name; private Byte leve ...
- Python11/26--mysql之视图/触发器/事务/存储过程
视图: 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的时候直接使用即可 2.为什么用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 select * from ...
- 2019.02.21 bzoj2829: 信用卡凸包(凸包)
传送门 题意:给nnn个A∗BA*BA∗B的矩形,其中每个矩形的四个角被改造成了半径为rrr的四分之一 圆,问这些矩形的凸包周长. 思路:考虑求出圆心的凸包周长然后加上一个整圆的周长,证明很简单,略掉 ...