ASP.NET使用X509Certificate2出现一系列问题的解决方法

 更新时间:2017年05月10日 14:36:18   作者:Shenroe  
这篇文章主要为大家详细介绍了ASP.NET使用X509Certificate2出现一系列问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

在做微信支付退款的时候,由于需要使用到p12证书,结果就遇到一系列的坑。这里做个记录方便以后查阅。

原先加载证书的代码:

复制代码 代码如下:
1 X509Certificate2 cert = new X509Certificate2(path + WxPayConfig.SSLCERT_PATH, WxPayConfig.SSLCERT_PASSWORD);2 Request.ClientCertificates.Add(cert);

在vs 上测试通过。但是部署到IIS上一直报这个问题:

复制代码 代码如下:
System.Security.Cryptography.CryptographicException: 系统找不到指定的文件。

详细Stack Trace信息:

在 System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
在 System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromFile(String fileName, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx)
在 System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromFile(String fileName, Object password, X509KeyStorageFlags keyStorageFlags)
在 System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName, String password)
在 TenpayCore.HttpService.Post(TenpayException& tpEx, Byte[] xml, String url, Boolean isUseCert, Int32 timeout)。

反复测试之后,确认不是代码跟文件路径的问题。在查询微软的文档后发现了相关说明,指明了问题所在,以下分享一下我的操作流程。

1.将证书安装上去

点击 [开始] -> [运行] -> 键入[mmc] 进入“控制台”界面 -> 选择[文件] -> [添加/删除管理单元](Ctrl+M)

选择 [证书] -> [计算机账户] -> [下一步] -> [完成]

选择 [证书] -> [导入]

导入你的证书文件

2.授权证书

先安装 winhttpcertcfg.exe 工具(Windows HTTP Services Certificate Configuration Tool)。安装完成之后在该工具在C:\Program Files (x86)\Windows Resource Kits\Tools 或者C:\Program Files\Windows Resource Kits\Tools 文件夹下。打开cmd键入命令:

复制代码 代码如下:
winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "你的证书名称" -a "你的iis账号标识"

-g 指令 就是授权

-c 是指证书所在的存储区

另外,证书的名称就是这个,如图所示 而不是其他什么东西,我就是搞错了,点击这个证书的详情取了里面的名称,导致授权不成功。

而iis账号标识,是指站点对应的应用程序池,高级设置里有标识这个选项来选择对应的用户。当时我授权的标识是Network Service,而应用程序池中的标识ApplicationPoolIdentity,结果导致我发起请求时出现了:

复制代码 代码如下:
System.Net.WebException: 请求被中止: 未能创建 SSL/TLS 安全通道。

3.修改代码

做完这些配置之后修改一下之前加载证书的代码。

复制代码 代码如下:
1 X509Store store = new X509Store("My", StoreLocation.LocalMachine);2 store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);3 4 System.Security.Cryptography.X509Certificates.X509Certificate2 cert = 5 store.Certificates.Find(X509FindType.FindBySubjectName, "你的证书名称", false)[0];

再测试一下,终于成功!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 使用UserControl做网站导航条的思路 分析

    使用UserControl做网站导航条的思路 分析

    使用UserControl做网站导航条的思路 分析...
    2007-09-09
  • .NET6+Quartz实现定时任务的示例详解

    .NET6+Quartz实现定时任务的示例详解

    在实际工作中,经常会有一些需要定时操作的业务,如:定时发邮件,定时统计信息等,那么如何实现才能使得我们的项目整齐划一呢?本文通过一些简单的小例子,简述在.Net6+Quartz实现定时任务的一些基本操作,如有不足之处,还请指正
    2023-03-03
  • ASP.Net项目中实现微信APP支付功能

    ASP.Net项目中实现微信APP支付功能

    这篇文章介绍了ASP.Net项目中实现微信APP支付功能的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • ASP.NET Core中使用EPPlus导入出Excel文件的完整步骤

    ASP.NET Core中使用EPPlus导入出Excel文件的完整步骤

    这篇文章主要给大家介绍了关于ASP.NET Core中如何使用EPPlus导入出Excel文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • .NET中XML序列化和反序列化常用类和属性小结

    .NET中XML序列化和反序列化常用类和属性小结

    本文主要介绍了.NET中XML序列化和反序列化常用类和属性小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • .Net Core和RabbitMQ限制循环消费的方法

    .Net Core和RabbitMQ限制循环消费的方法

    当消费者端接收消息处理业务时,如果出现异常或是拒收消息将消息又变更为等待投递再次推送给消费者,这样一来,则形成循环的条件,这篇文章主要介绍了.Net Core和RabbitMQ限制循环消费的方法,需要的朋友可以参考下
    2022-10-10
  • 用.Net的File控件上传文件的解决方案

    用.Net的File控件上传文件的解决方案

    用.Net的File控件上传文件的解决方案...
    2007-04-04
  • Visual Studio 2013如何使XML文件转换成类

    Visual Studio 2013如何使XML文件转换成类

    Visual Studio 2013如何使XML文件转换成类?这篇文章主要介绍了Visual Studio2013轻松将你的XML文件转换成类的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • .NET Core中的HttpClientFactory类用法详解

    .NET Core中的HttpClientFactory类用法详解

    本文详细讲解了.NET Core中的HttpClientFactory类的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • asp.net 因为数据库正在使用的解决方法

    asp.net 因为数据库正在使用的解决方法

    因为数据库正在使用,所以未能获得对数据库的排它访问权?
    2009-02-02

最新评论