【问题标题】:HTTP Error 403.7 when using Server Certificates on SSL在 SSL 上使用服务器证书时出现 HTTP 错误 403.7
【发布时间】:2012-02-02 09:30:25
【问题描述】:

我正在尝试通过使用服务器证书来保护我们的网络服务。为了进行测试,我在 IIS 管理控制台上创建了一个自签名证书,并将站点配置为使用该证书。 在 IIS 上,我创建了 HTTPS 绑定,并将其配置为使用证书。在我的 web 服务的虚拟路径上启用 SSL 并将其设置为 require 客户端证书。

右键单击证书,将其与密码一起导出到测试客户端的文件系统。

我使用以下代码来调用 web 服务,使用证书作为客户端证书:

SSLServiceReference.DataAccessService lService = new SSLServiceReference.DataAccessService();
X509Certificate2 lCert = new System.Security.Cryptography.X509Certificates.X509Certificate2(@"C:\Users\Dev06\Documents\TestSamsung2Cert.pfx", "qwerty");
lService.ClientCertificates.Add(lCert);
lService.Credentials = CredentialCache.DefaultNetworkCredentials;
DataSet lSet = lService.GetSites();

但在调用 GetSites() 时,我收到 403.7 http 错误。 我究竟做错了什么?我的意图是要求使用 Web 服务的客户端提供此证书,以便只有他们可以调用它。

IIS 7

感谢您的任何指点。

【问题讨论】:

    标签: asp.net .net web-services iis ssl


    【解决方案1】:

    为了澄清,您不需要服务器和客户端使用相同的证书,事实上,为每个使用唯一的证书可能会更好。服务器端的 IIS 对几乎任何客户端证书都感到满意(除非您以其他方式配置它或编写代码来检查证书并根据某些字段批准/拒绝)。也就是说,我认为这不是您遇到问题的原因。这可能是由于客户端无法真正访问证书或其私钥。

    如果您将 pfx 证书“安装”到客户端计算机的证书存储区,您的运气可能会更好。然后,您需要再次将其“导出”为 .cer 文件为运行您的客户端应用程序(即网络服务)的帐户配置对私钥的访问权限。

    请参见此处,如果您按照以下步骤操作(例如,将 PFX 安装到客户端的本地机器存储并配置对其私钥的访问),您应该可以开展业务:

    http://msdn.microsoft.com/en-us/library/ff649203.aspx

    我不确定您使用的是哪个 IIS 版本,但后来的版本实际上使此过程更容易一些。我还发现,当事情真的很奇怪时,使用 WireShark 之类的工具检查初始 SSL 握手流量会很有帮助。它可以帮助您确定问题出在客户端还是服务器上。在这种情况下,它看起来像客户端。

    【讨论】:

    • 谢谢,我会尝试并回复您。如果客户端和服务器都有不同的证书(IIRC 足以进行 SSL 通信),您如何验证只有某些证书才能访问站点/服务?有人告诉我,要实现这一目标,必须共享证书。
    • 有几种方法: 1) 默认情况下拒绝未经受信任的 CA 签名的客户端证书。您可以限制服务器上受信任的 CA(不过我不推荐这样做) 2)您可以在应用程序中编写代码来检查证书并做出决定是否访问(这是我一直做的)。或 3) IIS 有办法将客户端证书映射到用户帐户(我没有使用过)。
    • 我看到您使用的是 IIS7,不确定是什么操作系统,但在较新的操作系统中,您可以通过证书 MMC(用户界面)授予对证书私钥的访问权限。过去您必须使用我发布的链接中提到的命令行工具 winhttpcertcfg。
    猜你喜欢
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 2012-12-19
    • 2014-04-10
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 2018-07-20
    相关资源
    最近更新 更多