【问题标题】:C# cannot access webservice that requires a client certificate from within the serverC# 无法访问需要来自服务器内部的客户端证书的 Web 服务
【发布时间】:2013-07-09 18:10:55
【问题描述】:

我在 IIS 网站上有一个需要客户端证书的 web 服务,我的证书是自签名的,我可以在安装所有颁发/需要的证书后从我的开发计算机访问该网站而没有任何警告,我的问题是我需要要从服务器内访问 Web 服务但它不工作,我可以通过加载证书 pfx 文件从我的开发机器上做到这一点,但在服务器上它会爆炸,我已经拥有应用程序池访问商店证书的权限但仍然不行,我很感激任何建议。 谢谢

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

但是在服务器上的代码炸弹是: System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr) 在 System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromFile(....

所以我在服务器上尝试了这段代码: X509Certificate2 证书 = 新 X509Certificate2(Server.MapPath("Certs/MyFile.pfx"), "mypfx密码", X509KeyStorageFlags.MachineKeySet); svc.ClientCertificates.Add(cert);

还有一个新错误: “无法为 SSL/TLS 安全通道建立信任关系。”

我已经试过了 winhttpcertcfg.exe -g -c LOCAL_MACHINE\My -s MyCertName -a "MYMACHINENAME\应用程序池名称"

还有这个 ICACLS /grant "IIS AppPool\DefaultAppPool":R

我用我的服务器参数替换了命令中的参数,它们成功执行,但仍然没有出现“无法为 SSL/TLS 安全通道建立信任关系。”。

非常感谢任何帮助。 谢谢

【问题讨论】:

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


    【解决方案1】:

    我是如何让它工作的。

    错误:

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

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

    1) IIS

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

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

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

    代码感谢this website,从Matt Probstfeld II的评论中复制代码。

    【讨论】:

    • 你的代码修复不是很好,服务器需要做的就是给你任何证书,它会接受它。如果您使用的是自签名证书,您应该在客户端对证书的指纹进行硬编码并让它检查。
    猜你喜欢
    • 2011-05-22
    • 1970-01-01
    • 2014-08-17
    • 2014-02-23
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    相关资源
    最近更新 更多