常规情况下创建Web请求,并获取请求数据的代码如下:

WebRequest req = WebRequest.Create(url);

req.Timeout = 15000;

WebResponse result = req.GetResponse();

Stream ReceiveStream = result.GetResponseStream();

如果需要在代码中加入证书,则需要使用HttpWebRequest对象进行请求,代码如下:

//添加验证证书的回调方法

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

HttpWebRequest httpRequest = (HttpWebRequest)HttpWebRequest.Create(strQueryURL);

X509Certificate cerCaiShang = new X509Certificate(System.Web.HttpContext.Current.Server.MapPath(setting.PfxFile), setting.key);

httpRequest.ClientCertificates.Add(cerCaiShang);

HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();

Stream receiveStream = httpResponse.GetResponseStream();

// 回调方法

public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)

{

if (sslPolicyErrors == SslPolicyErrors.None)

return true;

return false;

}

本来这就算是完成了,但总是失败,原因未知,与万恶的Windows有关,还需要将客户端的证书+私钥(pfx 或p12 文件),导入到操作系统(windows)的相关证书区域,步骤:

Windows xp/2003

1. 单击 开始 ,单击 运行 ,键入 mmc ,然后单击 确定 。

2. 在 文件 菜单上单击 添加/删除管理单元 。

3. 在 添加/删除管理单元 对话框中,单击 添加 。

4. 在 添加独立管理单元 对话框单击 证书 ,然后单击 添加 。

5. 在在 证书管理单元中 对话框中单击 计算机帐户 ,然后单击 下一步

6. 在 选择计算机 对话框中,单击 完成 。

7. 在 添加独立管理单元 对话框单击 关闭 ,然后单击 确定 。

8. 展开 证书 (本地计算机) ,展开 个人 ,然后单击 证书 。

9. 右键 -》 所有任务-》导入 选择你的证书导入

Windows 7

1. 单击 开始 ,单击 运行 ,键入 mmc ,然后单击 确定 。

2. 在 文件 菜单上单击 添加/删除管理单元 。

3. 在 可用的管理单元 列表中选择 证书 ,点击 添加 。

4. 在 证书管理 对话框中选择 计算机账户 ,然后单击 下一步

5. 在 选择计算机 对话框中,单击 完成 。

6. 在 添加或删除管理单元 对话框单击 确定 。

7. 展开 证书 (本地计算机) ,展开 个人 ,然后单击 证书 。

8. 右键 -》 所有任务-》导入 选择你的证书导入

再次测试,就可以使用了。

参考:http://blog.wsdd.org/?p=510

C#创建https请求并使用pfx证书的更多相关文章

  1. AFNetWorking https请求 SSL认证 自制证书

    1.服务器会给一个证书,一般为.pem格式证书 2.将.pem格式的证书转换成.cer格式的证书 打开电脑自带终端 ,进入到桌面  cd Desktop 回车回到桌面Desktop Admin$ 输入 ...

  2. WinInet:HTTPS 请求出现无效的证书颁发机构的处理

    首先,微软提供的WinInet库封装了对网页访问的方法. 最近工作需要从https服务器获取数据,都知道https和http网页的访问方式不同,多了一道证书认证程序,这样就使得https在请求起来比h ...

  3. 解决linux netcore https请求使用自签名证书忽略安全检查方法

    当前系统环境:centos7 x64. dotnet 2.0. 不管是 ServicePointManager.ServerCertificateValidationCallback = (a, b, ...

  4. git openssl 模块生成 https 请求的 ssl 测试证书

    1,请先确定安装了相关模块 1.1,git --version 1.2,openssl version -a 2,创建一个目录, cd 到该目录下 3,生成私钥  key 文件   openssl g ...

  5. (四)进行HTTPS请求并进行(或不进行)证书校验(示例)

    原文:https://blog.csdn.net/justry_deng/article/details/81042379 相关方法详情(非完美封装): /** * 根据是否是https请求,获取Ht ...

  6. jmeter测试https请求

    测试https请求时,需要添加证书 目录 1.下载证书 2.导入 3.执行https请求 1.下载证书 在浏览器中打开要测试的https协议的网站,以谷歌为例打开,下载证书到桌面 4.一直点击下一步 ...

  7. iOS使用自签名证书实现HTTPS请求

    概述 在16年的WWDC中,Apple已表示将从2017年1月1日起,所有新提交的App必须强制性应用HTTPS协议来进行网络请求. 默认情况下非HTTPS的网络访问是禁止的并且不能再通过简单粗暴的向 ...

  8. httpclient绕过证书验证进行HTTPS请求

    http请求是我们常用的一种web应用的应用层协议,但是由于它的不安全性,现在正在逐渐向https协议过渡.https协议是在http的基础上进行了隧道加密,加密方式有SSL和TLS两种.当serve ...

  9. linux c++ curl https 请求并双向验证SSL证书

    1.配置curl https请求需要提供 CA证书.客户端证书和客户端秘钥,这三个文件的pem格式. 分别对应 curl_easy_setopt() 函数的 下面三个参数: CURLOPT_CAINF ...

随机推荐

  1. PHP连接sqlserver的两种方法,向sqlserver2000中写入数据,中文乱码

    项目环境是php5.3.28 项目用的ThinkPHP3.2.3  已经mysql5.5数据库,要和另一个项目对接,需要连接sqlsever2000数据库进行一些操作. 第一种用php自带扩展连接数据 ...

  2. Sheepdog HTTP API

    1.sheepdog中http simple storage中nginx后台配置文件模板留存: events { worker_connections 1024;} http { server { l ...

  3. hggroup和adress

    hggroup通常放在标签内部,不过不做强制要求! ​adress 通常用于作者的联系信息.比如名字,Email,电话,地址.标签内字体显示斜体. ​ 与 标签的比较:比div简洁,更少的用到id或c ...

  4. 51nod1079中国剩余定理

    /** *中国剩余定理 */ #include<iostream> #include<cstdio> #include<map> #include<cstri ...

  5. [CSS]white-space 属性详解

    实例 规定段落中的文本不进行换行: p { white-space: nowrap } 可能的值 值 描述 normal 默认.空白会被浏览器忽略. pre 空白会被浏览器保留.其行为方式类似 HTM ...

  6. 运行phpize失败排查

    ==相关参考== rpm包 http://rpmfind.net/linux/rpm2html/ phpize学习 ==问题及排查过程== 1.phpize失败 2.yum install php-d ...

  7. 在VS中手工创建一个最简单的WPF程序

    如果不用VS的WPF项目模板,如何手工创建一个WPF程序呢?我们来模仿WPF模板,创建一个最简单的WPF程序. 第一步:文件——新建——项目——空项目,创建一个空项目. 第二步:添加引用,Presen ...

  8. ee_15_mvc_db_page----demo---bai

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  9. 关于JDNI、JMX

    http://www.cnblogs.com/itech/archive/2010/09/16/1827999.html http://javacrazyer.iteye.com/blog/75948 ...

  10. Android 共享文件的 Runtime 权限

    在开发 Android 应用时,总会涉及到获取打电话.地理位置.网络等敏感的用户信息的权限,在 Android 中,联系人.当前位置等这些敏感信息都是由 permissions 保护的,Android ...