C#无法访问需要服务器内的客户端证书的Web服务

时间:2013-07-09 18:10:55

标签: c# asp.net web-services iis client-certificates

我在IIS网站上有一个需要客户端证书的网络服务,我的证书是自签名的,我可以在安装所有已颁发/要求的证书后从我的开发计算机访问该网站而没有任何警告,我的问题是我需要要从服务器内部访问web服务并且它无法正常工作,我可以通过加载证书pfx文件从我的开发机器中执行此操作,但是在服务器上它会炸弹,我已经拥有应用程序池访问商店证书的权限但仍然没有去,我感谢任何建议。 感谢

在开发机器上,此代码有效:     svc.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate2(Server.MapPath(“Certs / MyFile.pfx”),“mypfxpassword”));

但在服务器上用以下代码编码炸弹:     System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromFile(....

中的System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)

所以我在服务器上尝试了这个代码:     X509Certificate2 cert = new X509Certificate2(Server.MapPath(“Certs / MyFile.pfx”),             “mypfxpassword”             X509KeyStorageFlags.MachineKeySet);             svc.ClientCertificates.Add(CERT);

并且出现了新的错误:     “无法为SSL / TLS安全通道建立信任关系。”

我已经尝试过这个 winhttpcertcfg.exe -g -c LOCAL_MACHINE \ My -s MyCertName -a“MYMACHINENAME \ App Pool的名称”

ICACLS / grant“IIS AppPool \ DefaultAppPool”:R

我将命令中的参数替换为我的服务器参数,并且它们已成功执行,但仍未执行“无法为SSL / TLS安全通道建立信任关系。”。

非常感谢任何帮助。 感谢

1 个答案:

答案 0 :(得分:0)

我是如何运作的。

<强>错误:

  

无法创建SSL / TLS安全通道 - 问题可能是代理   服务器

     

无法为SSL / TLS安全建立信任关系   信道“

1)IIS

  • 打开IIS
  • 选择应用程序池
  • 选择您的游泳池
  • 点击“高级设置”
  • 将“加载用户个人资料”设置为“True”(我的设置为False)

2)代码修复(必需原因客户端证书是自签名的,.NET不信任

  • ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

代码感谢this website,复制了来自 Matt Probstfeld II 评论的代码。