我可以选择支持客户端证书。这就是我设置Client certificates
在Accept
IIS 上的原因。这适用于大多数机器。但是,在某些机器上,IIS 返回 500。这可以通过设置Client certificates
为Ignore
(这不是我的选择)或设置Negotiate Client Certificate
为Enabled
(这可以通过netsh http add ...
或更改DefaultFlags
为 2 in来完成HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\SslBindingInfo\0.0.0.0:443\
;这也可以在 IIS 管理器中更改?)。虽然(启用)此设置听起来很合理,但仅从名称来看,我不明白为什么在某些机器上需要它,而在其他机器上不需要它......
1 回答
TL;博士
如果您需要客户端证书来访问服务器上的任何资源,您可以一直启用此功能。主要原因是由于可能的中间人 (MITM) 攻击,一些客户端不允许 TLS 重新协商。
如果您的客户端支持 TLS 重新协商并且 MITM 风险是可以接受的,您可以禁用此功能。
描述
IIS 有两种协商 TLS 的方法:
- 客户端在初始请求中发送客户端证书的位置。当服务器上的所有资源都需要 TLS 客户端身份验证时,这很有用。
- 客户端在初始请求中不发送客户端,但稍后在 IIS 执行 TLS 重新协商之后。当只有某些资源需要 TLS 客户端身份验证时,这很有用。
该Negotiate Client Certificate
设置确定使用哪个,第一个如果启用,第二个如果禁用。以下是微软博客的更多内容:
- 如果启用此设置,客户端浏览器将在与 Web 服务器协商初始安全连接时发送客户端证书。
- 如果禁用,Web 服务器和浏览器将根据服务器证书协商初始安全连接,然后在客户端发送客户端证书时重新协商连接。
客户支持和错误
问题是某些客户端不会重新协商 TLS 会话。如果客户端不这样做,您可能会在服务器日志中遇到以下错误。设置Negotiate Client Certificate
为Enabled
可以解决此问题。
The following fatal alert was generated: 20. The internal error state is 960.
TLS 重新协商 MITM 攻击
一些客户端不重新协商 TLS 连接的原因是由于与 TLS 重新协商相关的中间人 (MITM) 攻击:
自从发现围绕 SSL 重新协商的 MITM 攻击以来,很多圈子的答案都是挂断重新协商请求。
- 使 IIS 在初始握手期间需要 SSL 客户端证书
- http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.156.4428&rep=rep1&type=pdf
- https://security.stackexchange.com/questions/63867/ssl-tls-renegotiation-handshakes-mitm-plaintext-data-injection-medium-or-low
Negotiate Client Certificate
需要这样做的客户端可能会在 TLS 重新协商期间防止 MITM 攻击。
概括
如果您对所有 IIS 资源都需要客户端证书没有问题,启用此功能可能允许您与更多客户端进行互操作,并进一步保护您的流量。
禁用此选项以支持差异 TLS 客户端身份验证支持,同时了解 MITM 风险。