C#创建https请求并使用pfx证书

简介:

常规情况下创建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 




本文转自齐师傅博客园博客,原文链接:http://www.cnblogs.com/youring2/archive/2011/03/28/1997694.html,如需转载请自行联系原作者

相关文章
|
13天前
|
前端开发
webpack如何设置devServer启动项目为https协议
webpack如何设置devServer启动项目为https协议
231 0
|
13天前
|
Web App开发 移动开发 JavaScript
Python网络编程(三),HTTP协议
Python网络编程(三),HTTP协议
68 0
|
5天前
|
JSON 安全 网络协议
【Linux 网络】网络基础(二)(应用层协议:HTTP、HTTPS)-- 详解
【Linux 网络】网络基础(二)(应用层协议:HTTP、HTTPS)-- 详解
|
13天前
|
存储 算法 安全
[计算机网络]---Https协议
[计算机网络]---Https协议
|
13天前
|
安全 网络协议 算法
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
|
13天前
|
网络协议 安全 算法
HTTP协议与HTTPS协议
HTTP协议与HTTPS协议
|
13天前
|
网络协议 安全
【专栏】`curl`是广泛用于网络编程和自动化脚本的命令行工具,支持HTTP、HTTPS等协议
【4月更文挑战第28天】`curl`是广泛用于网络编程和自动化脚本的命令行工具,支持HTTP、HTTPS等协议。在处理大文件或慢速服务器时,设置超时参数至关重要。本文介绍了`curl`的超时参数,如`-m`(最大操作时间)、`-c`(连接超时)、`--dns-timeout`(DNS解析超时)和`-t`(时间条件)。通过示例展示了如何设置这些超时,并提到了一些高级技巧和注意事项,如错误处理和带宽限制。合理设置超时能提高效率和可靠性,对编写健壮的自动化脚本非常有用。
|
13天前
|
安全 网络安全 数据安全/隐私保护
HTTPS协议
HTTPS协议
23 0