【问题标题】:403.7 IIS 7.5 SSL client certificate authentication issue403.7 IIS 7.5 SSL 客户端证书身份验证问题
【发布时间】:2011-05-25 21:55:03
【问题描述】:

我正在与外部合作伙伴一起在 IIS 7.5 下使用 2 路 SSL 测试 Web 服务。我需要 SSL,需要客户端证书,并使用一对一映射对域帐户进行身份验证。我已经配置了所有东西,它在我们的网络上运行良好(我能够提供客户端证书、获得身份验证并从浏览器和测试工具调用服务)。 从我们的网络外部(在大多数情况下,见下文),我收到 403.7 错误。我已经浏览了机器级证书存储并确保证书和 CA 是可信的。 这是奇怪的事情。我获得了 I 类证书以在家进行测试(并且像我们的预期合作伙伴一样获得了 403.7)。所以我设置了 Fiddler 来调试 SSL 并发送我的证书,并且出于某种原因,这个 工作。我设置了一个测试工具来通过完全相同的证书,并获得了 403.7。我在我的浏览器 (IE 9) 中测试,没有提示输入客户端证书,并得到 403.7。
任何帮助表示赞赏。 比尔

【问题讨论】:

    标签: ssl client certificate


    【解决方案1】:

    上次我检查时,IIS 使用重新协商(默认情况下)来获取客户端证书:服务器不请求客户端证书的第一次握手,然后是另一个握手(这次加密),其中服务器请求证书(通过 TLS CertificateRequest 消息)。这将阻止您从 Wireshark 看到任何内容,除非您将其配置为 to use the server's private key and decipher the traffic(请注意,这只适用于某些密码套件)。

    查看客户端证书协商的一种方法是将 IIS 配置为使用初始客户端证书协商,使用 netsh and clientcertnegotiation=true(这是关于初始协商)。至少CertificateRequest 和证书将在握手期间以明文形式发送,因此您应该能够使用 Wireshark 看到这一点。 如果客户端没有向服务器发送证书作为对CertificateRequest 的响应,您仍然会看到来自客户端的空Certificate 消息。

    如果您不导出带有证书的私钥以用于 Fiddler 或任何其他客户端,则它不可能使用该证书。它最多可能会尝试发送证书,但握手会失败(因为CertificateVerify 消息需要由客户端的私钥签名)。

    我猜你可能会遇到这样的问题:

    • 服务器接受不提供证书(实际上是可选的),
    • 提供无效证书会使其失败并导致此 403.7 状态代码(许多服务器和 SSL/TLS 堆栈会将其视为致命错误,但 TLS specification 并没有说 unsupported_certificatecertificate_revoked、@ 987654331@、certificate_unknown 应该是致命的,所以这由服务器自行决定)。

    【讨论】:

    • 好建议。我忘了我们在使用 WS 时使用了 clientcertnegotiation=true :)
    • 我能够使用 Wireshark 进行 SSL 解密。我在我们的网络中看到的是在第二次握手后发送给客户端的证书请求消息。这不会发生在我们的网络之外(第二次握手后服务器没有发送证书请求。发送的是:服务器你好,证书)。再次感谢您的阅读和回复。
    • 如果从上面看不清楚,这仍然是一个悬而未决的问题。我的怀疑现在转向我们的防火墙或证书请求中返回的 CA 列表(尽管我没有在我们的网络之外看到证书请求,但我确实注意到请求中包含的 CA 列表内部网络上的列表不是我在计算机商店中配置的完整列表。不知道为什么。)
    • 好的,解决了我的问题。首先,我不知道为什么我在 Wireshark 中没有看到证书请求,因为我现在看到了一个正在运行的证书请求,并且我确定之前已经发布了一个,因为我确实得到了带有另一个证书的证书提示.所以我认为这是一个假阴性。我不得不将服务更改为在具有证书存储和 NTFS 文件夹权限的帐户下运行。我的客户端证书使用中间 CA,因此我需要将其添加到服务器机器存储中。最后一个问题是我的客户端证书的根 CA 导入了没有客户端身份验证使用指示。
    【解决方案2】:

    您是否使用同一台物理机来测试网络内和外部网络连接?如果没有,您确定外部网络客户端可以访问私钥吗?

    我之前没有配置过 Fiddler 客户端认证。它是否从标准证书存储中读取客户端证书和密钥?它是否直接从 PKCS12 读取?

    另一件可能有用的事情是检查 WireShark 中的 TLS 握手。具体来说,查看服务器的“证书请求”消息,因为此处的数据会提示客户端 (IE9) 应在提示中显示哪些客户端证书。比较一下内部和外部连接。

    【讨论】:

    • 感谢您的建议。 Fiddler 只需使用一个 .cer 文件,您将其放置在其 MyDocuments 文件夹中的固定文件名下。我没有在证书文件中嵌入私钥,但似乎并没有打扰 Fiddler 的连接。我会尝试你的 Wireshark 想法,虽然我以前从未看过 TLS 握手。我的一个怀疑是我们在服务器上的通配符证书可能会以某种方式影响证书查询,但是当 Fiddler 的代理服务器请求证书时,它可能正在工作,然后 Fiddler 无论如何都会将该证书传递给服务器。再次感谢。
    猜你喜欢
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多