我的客户有一个请求,内容如下:
这是一个公共网站,一些机构员工信息。我的客户希望在首页上有一个仅向员工显示的弹出窗口。
该机构使用 CAC 卡进行身份验证,这些卡上有多个证书。在内部站点上,这非常简单,只需相应地设置 IIS,然后与 AD 进行比较。
但是,由于这是一个外部网站,因此我不想进行身份验证。我希望 IIS 默默地检查 CAC/证书是否存在,如果存在,则运行弹出逻辑,如果不存在,则忽略它。第二部分都是编码,但我需要知道 IIS 是否可以默默尝试查找 CAC/证书
我最初的想法是将请求 IP 与我们的内部 IP 范围进行比较,但是我的服务器位于负载均衡器后面,并且当到达我的服务器时,请求将具有负载均衡器 IP,并且每个请求都在范围内。
这是一个复杂的情况,到目前为止我所做的所有调查都表明这是不可能做到的,但我想问一下
提前致谢
答案1
网络服务器无法“查看”客户端的智能卡——这是完全由 Web 浏览器完成。IIS 影响此操作的唯一方法是发送“可接受”证书颁发者 DN 列表(我认为这在 TLSv1.3 中也不再可能)。但如果浏览器认为需要显示证书列表,那么它将要显示证书列表。
大多数网站,即使是使用 CAC 或其他客户端证书身份验证的网站,都有一个专用的登录 URL,该 URL 需要证书身份验证,但系统的其余部分则不需要。相反,“登录”状态是通过传统的 cookie/会话来传递的。这允许系统提供几种不同的身份验证方法。(我不知道 IIS 是否支持每个 URL 的证书身份验证;您可能必须为“登录”页面使用单独的子域。)
其中一个例子是 的“登录”页面https://account.cern.ch/account/
,它实际上似乎通过 Microsoft ADFS 处理一切。
或者,您可以在两个不同的子域上托管整个 web 应用程序:一个用于公共访问,另一个需要身份验证。(https://public.cyber.mil/
这是我最近看到的一个例子。)