当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET使用X509Certificate2出现一系列问题的解决方法

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

2017年12月08日  | 移动技术网IT编程  | 我要评论

江苏中考,vertu威图,my love伴奏

在做微信支付退款的时候,由于需要使用到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.授权证书

先安装 工具(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];

再测试一下,终于成功!

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网