Chrome 和 Safari 不遵守 HPKP

Chrome and Safari not honorring HPKP

我将 HPKP header 添加到我的站点,但 Chrome 或 Safari 不支持它。我通过设置代理并转到 chrome://net-internals/#hsts 并查找我的域来手动测试它 - 但没有找到。 HPKP 似乎是正确的,我还使用 HPKP toolset 对其进行了测试,所以我知道它是有效的。

我在想我的流程可能做了一些奇怪的事情。我有一个网络应用程序,通过 myapp.example.com 提供服务。登录时,应用程序将用户重定向到 authserver.example.com/begin 以启动 OpenID Connect 授权代码流。 HPKP header 仅从 authserver.example.com/begin 返回,我认为这可能是问题所在。我在 HPKP header 中有 include-subdomain,所以我认为这不是问题所在。

这是 HPKP header(为便于阅读而添加的换行符):

public-key-pins:max-age=864000;includeSubDomains; \
pin-sha256="bcppaSjDk7AM8C/13vyGOR+EJHDYzv9/liatMm4fLdE="; \
pin-sha256="cJjqBxF88mhfexjIArmQxvZFqWQa45p40n05C6X/rNI="; \
report-uri="https://reporturl.example"

谢谢!

I added HPKP header to my site, but it is not honored by Chrome or Safari... I tested it manually by setting a proxy...

RFC 7469, Public Key Pinning Extension for HTTP,有点偷偷地从你身边溜走。 IETF 发布了它并覆盖了它,因此攻击者可以破坏已知的良好 pinset。它曾在标准中以名称 "override" 提及,但未提供详细信息。 IETF 也未能在安全注意事项部分发布讨论。

更重要的是,您设置的代理参与了覆盖。不管它是错误的代理、由移动设备 OEM 安装的代理证书,还是由欺骗用户安装它的攻击者控制的代理。 Web 安全模型和标准允许这样做。他们接受拦截并认为这是一个有效的用例。

他们做的另一件事是将损坏的插针组报告设置为不得不应该。这意味着用户代理也是掩盖事实的同谋。这也没有在安全注意事项部分中讨论。他们真的不想让人们知道他们所谓的安全连接被拦截了。

避免它的最佳方法是移出 Web 安全模型。当存在安全问题时,不要使用基于浏览器的应用程序。使用混合应用程序并自己执行固定。您的混合应用程序可以托管 WebView 控件或视图,但仍可以访问通道以验证参数。另见 OWASP's Certificate and Public Key Pinning.

另请参阅 IETF 邮件列表中的 Comments on draft-ietf-websec-key-pinning。评论中的建议之一是将标题更改为 "Public Key Pinning Extension for HTTP with Overrides" 以突出显示该功能。毫不奇怪,这不是他们想要的。他们试图在用户不知情的情况下偷偷进行。


这是来自 RFC 6479 的相关文本:

2.7. Interactions with Preloaded Pin Lists

UAs MAY choose to implement additional sources of pinning information, such as through built-in lists of pinning information. Such UAs should allow users to override such additional sources, including disabling them from consideration.

The effective policy for a Known Pinned Host that has both built-in Pins and Pins from previously observed PKP header response fields is implementation-defined.

本地安装的 CA(就像您所说的用于代理的那些 运行)覆盖任何 HPKP 检查。

鉴于它们的流行,这是必要的,以免完全破坏互联网:大公司使用的防病毒软件和代理基本上是通过本地颁发的证书的 MITM https 流量,否则它们无法读取流量。

有些人认为在本地安装 CA 需要访问您的机器,到那时它就结束了,但对我来说,这仍然大大降低了 HPKP 的保护,而且使用 HPKP 的风险很高,表示我真的不喜欢它。