如何使证书固定(HPKP)和自签名证书在本地网络中发挥作用?

如何使证书固定(HPKP)和自签名证书在本地网络中发挥作用?

我需要在本地网络中使用 SSL,并且我想避免浏览器无效证书错误。

我的想法是生成自签名证书,然后使用证书固定(HPKP),以便告诉浏览器只有这个证书才是可信的?

我目前正在探索与这个想法相关的所有选项。我已经使用自签名证书和 HPKP 标头 (Public-Key-Pins) 进行了测试,其值为:

"pin-sha256="somedataencodedbase64=";pin-max-age=10;includeSubDomains"

浏览器不接受它作为安全证书。我仍然需要完成此测试(使用不同的自签名证书,并且我需要确保正确计算 SPKI...

现在的问题是:

  • 为给定的本地主机名(例如 mylocalserver)颁发的自签名证书是否有效,并固定在服务器响应中?这能行得通吗?

  • 证书固定是否适用于本地主机名(这意味着它仅适用于域名)?

  • 固定证书是否必须首先有效或由 CA 推动(这意味着自签名证书不能被固定 - 除非将它们添加到客户端的信任库中)?

  • 在本地拥有有效 SSL 的另一种最简单的方法是什么,这样我就不需要配置客户端(客户端信任存储)?

  • 我们可以将证书锁定视为受信任 CA 的替代方案吗?我读到过一些文章说此外所以这意味着证书链首先需要有效,然后您才能固定它?

  • 我也越来越怀疑这个想法是否可行。因为这样我们会看到这种技术的更多应用。每个人都会生成自签名证书并将其固定……并在 CA 信任证书上节省几块钱……或者我对整个概念的理解是错还是对?

答案1

HPKP 不会取代常规验证。相反,它是对常规验证的补充。因此,如果由于证书是自签名的而导致常规验证失败,则 HPKP 将无济于事。

答案2

为给定的本地主机名(例如 mylocalserver)颁发的自签名证书是否有效,并固定在服务器响应中?这能行得通吗?

是的,HPKP 只是为给定的 x.509 证书发布签名。浏览器(或任何 Web 客户端)只是在规定的时间内缓存它,然后在后续访问时验证此签名。

证书固定是否适用于本地主机名(这意味着它仅适用于域名)?

本地主机名就是主机名,和其他主机名一样。即使它很短。即使它有一个本地 TLD。问题是 - 您的客户端如何解析它以及它在Host:HTTP 请求的标头中请求什么。如果它解析主机福巴到正确的 IP,然后在 HTTP 请求中询问Host:,自签名证书的 CN 设置为福巴,则整个方案开始发挥作用。

固定证书是否必须首先有效或由 CA 推动(这意味着自签名证书不能被固定 - 除非将它们添加到客户端的信任库中)?

不,他们没有。但是,您的 Web 客户端应该有办法信任服务器证书。要么将其放入受信任的服务器证书列表中,要么您创建例外(这实际上与前面相同),要么您创建本地 CA 并使用本地 CA 证书签署服务器证书。自签名服务器证书只是一种跳过本地 CA 创建的方法。顺便说一句,所有官方的CA 使用自签名证书作为其公钥基础设施的根点。这是创建 CA 的合法方式。官方的CA 只是一个 CA,其证书被添加到最知名的软件(如操作系统、浏览器等)的信任库中。协商添加需要花钱,这就是为什么大多数软件都不免费的原因。

在本地拥有有效 SSL 的另一种最简单的方法是什么,这样我就不需要配置客户端(客户端信任存储)?

为每项服务获取自签名证书。如果您只有少数此类服务,则可以使用自签名证书;如果您有数十项服务,则需要创建本地 CA。还有一种合法的免费方式来获取公开接受的 X.509 证书 - 只需使用LetsEncrypt证书颁发机构 - 免费。但是,他们不提供通配符证书 - 带有 的证书*,如果您有大量服务,这可能会成为问题。

我们可以将证书锁定视为受信任 CA 的替代方案吗?我读到过一些文章说它只是附加的,所以这意味着证书链首先需要有效,然后才能锁定它?

不。证书锁定是针对中间人当有人冒充目标 CA 时,就会发生攻击。为此,“某人”必须已将其根 CA 证书放入您的信任库中,但这是另一个问题。

我也越来越怀疑这个想法是否可行。因为这样我们会看到这种技术的更多应用。每个人都会生成自签名证书并将其固定……并在 CA 信任证书上节省几块钱……或者我对整个概念的理解是错还是对?

你绝对是。

答案3

经过进一步研究,我确实想深入了解实际的规格。

因此 RFC 7469 规定:

2.3.1. Public-Key-Pins 响应头字段处理

如果 UA 通过安全传输收到包含符合第 2.1 节中规定的语法的 PKP 标头字段的 HTTP 响应,并且没有底层安全传输错误或警告...

所以现在官方已经明确,首先需要进行正确的 SSL 握手(包括验证认证链),然后才能进行 HPKP……

相关内容