SSL/TLS安全通道未能被创建

qq_30223935 2016-05-04 05:13:19
最近在做一个支付的接口,对方的接口用的是证书验证的方式,有一个dome,
导入证书后 有这句 X509Certificate certificate = new X509Certificate(@"路径", 密码);
本地调用一切正常,但是当布置到服务器的iis上就出现问题了:

Systme.net.webexception:请求被终止:未能创建SSL/TLS安全通道

证书是直接导入。

代码大概:
ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;
X509Certificate certificate = new X509Certificate(@"路径", 密码);

ResetPasswordService port = new ResetPasswordService();
port.ClientCertificates.Add(certificate);
就在这一步调用时报错
String ruslet = port._ResetPassword("100001", "2", "18616562850", "415086", 1);
...全文
1019 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_30223935 2016-05-05
  • 打赏
  • 举报
回复
我解决问题步骤具体如下:
cmd - mmc 打开控制台, 然后添加证书, 这个时候可以管理证书了
然后给证书添加权限
选择证书 右键 所有任务 管理私钥 然后添加 一个


问题原因 : 本地VS 会默认给权限, 布置到IIS 上 证书 需要手动给上 IIS 用户组的权限
qq_30223935 2016-05-05
  • 打赏
  • 举报
回复
[quote=引用 2 楼 qq_34806829 的回复:] 1.将客户端证书文件导入到本地计算机账户下的个人存储区。 2.下载winhttpcertcfg.exe 这个工具,下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=19801 .... 这个我昨天晚上看到了 和我的情况非常相符, 但是这个工具好像不太好用. 他说的 最后一句话 说道了重点: 导入的客户端证书并不是所有的账户都能访问和使用,因为我们的开发服务器也就是VS自带的服务器默认使用当前用户,而当前用户具有使用证书的权限,所以我们在本地调试的时候,一切正常。当我们将网站部署到IIS后,由于IIS的使用的是内置账户不具有证书的使用权限,所以就出现了上述问题,这个时候我们只需用winhttpcertcfg这个工具给指定账户授予使用证书的权限,就可以正常调用啦! 现在我刚刚解决了,其实就是权限的问题, mcd - mmc 进入控制台 添加证书找到那个证书 然后给iis 用户组设置权限就 好了 .
qq_34806829 2016-05-05
  • 打赏
  • 举报
回复
http://www.cnblogs.com/ccsharp/p/3270344.html
qq_34806829 2016-05-05
  • 打赏
  • 举报
回复
1.将客户端证书文件导入到本地计算机账户下的个人存储区。 2.下载winhttpcertcfg.exe 这个工具,下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=19801 3.安装后一般是在C:\Program Files\Windows Resource Kits\Tools这个路径下面。 进入cmd 执行如下命令:winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "test" -a "NetworkService" 这里解释一下这几个参数的含义: -g 是grant授权的意思,将该证书的使用权限授予某个用户 -c 是certstore证书存储区,指定 本地计算机/当前用户下的证书存储区位置,我们这里是MY,个人存储区 -s 是subjectstr 用于模糊匹配证书的一个字符串,我们这里用证书文件名 test -a 是account要授权的用户帐号 这里要注意的是授权账户,IIS6下面一般用的是NetworkService,如果你用的IIS7,必须要保证你网站所用的应用程序池的 "标识"和要授权的账户一致。 执行成功之后,会列出模糊匹配出的证书列表和已经授权的账户。 修改的代码: //webservice客户端代理类 SvcService svc = new SvcService(); //打开本地计算机下的个人证书存储区 X509Store certStore = new System.Security.Cryptography.X509Certificates.X509Store(StoreName.My, StoreLocation.LocalMachine); certStore.Open(OpenFlags.ReadOnly); //根据名称查找匹配的证书集合,这里注意最后一个参数,传true的话会找不到 X509Certificate2Collection certCollection = certStore.Certificates.Find(System.Security.Cryptography.X509Certificates.X509FindType.FindBySubjectName, "test", false); //将证书添加至客户端证书集合 svc.ClientCertificates.Add(certCollection[0]); //webservice调用代码 康少: 导入的客户端证书并不是所有的账户都能访问和使用,因为我们的开发服务器也就是VS自带的服务器默认使用当前用户,而当前用户具有使用证书的权限,所以我们在本地调试的时候,一切正常。当我们将网站部署到IIS后,由于IIS的使用的是内置账户不具有证书的使用权限,所以就出现了上述问题,这个时候我们只需用winhttpcertcfg这个工具给指定账户授予使用证书的权限,就可以正常调用啦!
qq_30223935 2016-05-04
  • 打赏
  • 举报
回复

12,162

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧