gpt4 book ai didi

.net - 在 IIS 6 上使用 ASP.NET MVC 站点的客户端证书

转载 作者:行者123 更新时间:2023-12-04 07:15:52 27 4
gpt4 key购买 nike

想要通过客户端证书实现身份验证我遇到了一些问题。

首先是一些事实

整个网站都在使用 SSL。我正在使用 IIS 6(在 Windows Server 2003 上)并且已将站点配置为接受客户端证书,不需要它们。然而,大多数浏览器的实现方式是,它们只会在严格要求时才要求用户提供证书。因此,身份验证模型并不是真正有用。

我自己的建议

我的第一个想法是设置 HttpResponse.Status属性,但它要求第一个空格之前的字符为整数。让浏览器发送客户端证书的有用状态是 403.7 Client certificate required所以这将不起作用(除非您可以覆盖它)。

我还认为我只会将 IIS 配置为需要特定路径的客户端证书,但这 - 当然 - 仅适用于物理文件而不适用于路由。

一种可能的解决方案是创建一个特定的文件夹并为其提供客户端证书,这与其说是解决方案,不如说是一种黑客攻击。所以如果有人有更好的建议,我想避免这种情况。

澄清

我已经测试了 Internet Explorer、Firefox 和 Chrome 的浏览器响应(我使用 Chrome 作为我的主要浏览器,Firefox 作为次要浏览器)。除非我在 IIS 中根据需要配置它,否则所有浏览器都不会要求客户端证书。

HTTP 状态代码 403.7 是由于我的理解允许,因为 RFC 2616 仅将状态代码定义为前三位数字。由于 IIS 6 在需要客户端证书时返回 403.7,我认为发送它会强制 IIS 进入触发要求的特殊模式。

我想现在的问题是如何配置 IIS 以要求给定虚拟路径而不是物理路径的证书。

最佳答案

当仅请求证书而不是要求证书时,服务器发送的 CertificateRequest 消息没有区别。服务器在这两种情况下都发出相同的请求,并在客户端未能提供所需的证书时简单地终止握手。因此,如果您的浏览器似乎忽略了“请求”,它也应该忽略“要求”。

检查以下各项:

  • 您的浏览器是否配置为忽略
    所有证书请求,从不
    送一个?
  • 您的浏览器是否配置为使用
    在没有提示的情况下提供证书
    用户? (换句话说,你怎么知道浏览器没有发送证书?)
  • 您的服务器是否实际请求
    证书?

  • 我测试最后一个案例的方法是使用 OpenSSL (也可在 Cygwin 中找到)工具:
    openssl s_client -connect server.y.com:443 -msg

    服务器发送它的证书消息后,它将插入一个 CertificateRequest 方法,如果它没有请求客户端身份验证,则该方法不存在。 s_client 输出如下所示:
    <<< TLS 1.0 Handshake [length 0008], CertificateRequest
    0d 00 00 04 01 01 00 00

    如果服务器仅在特定路径上使用客户端身份验证,我不确定它是如何工作的,因为初始 SSL 握手在客户端传输 HTTP 请求之前已完成。服务器此时请求新的握手是合理的,但我从未测试过哪些服务器支持这一点。

    您可以手动通过 s_client 伪造 HTTP 请求,输入:
    GET /your/path/here HTTP/1.1[Enter]
    Host: server.y.com:443[Enter]
    [Enter]

    如果您根本没有看到 CertificateRequest 消息,则您的服务器设置不正确。

    根据目录结构指定安全约束非常普遍,实际上可以很好地简化安全管理。如果这为您提供了解决方案,请不要为此感到难过。

    403.7 不是 HTTP 状态代码。这是微软“拥抱、扩展和熄灭”的诡计吗?在任何情况下,这听起来都不是正确的方向,因为这是传输层问题,而不是应用层问题。

    关于.net - 在 IIS 6 上使用 ASP.NET MVC 站点的客户端证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/122687/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com