我需要在本地网络中使用 SSL,并且我想避免浏览器无效证书错误。
我的想法是生成自签名证书,然后使用证书固定(HPKP),以便告诉浏览器只有这个证书可以信任?
我目前正在探索与这个想法相关的所有选项。我已经使用具有值的自签名证书和 HPKP 标头(Public-Key-Pins)进行了测试,例如:
"pin-sha256="somedataencodedbase64=";pin-max-age=10;includeSubDomains"
浏览器不接受它作为安全。我仍然需要完成这个测试(使用不同的自签名证书,我需要确保正确计算 SPKI ...
现在的问题是:
为给定的本地主机名(例如 mylocalserver)颁发并固定在服务器响应中的自签名证书是否有效?这甚至会起作用吗?
证书固定是否适用于本地主机名(这意味着它仅适用于域名)?
固定证书是否必须首先由 CA 有效或推动(这意味着自签名证书不能固定 - 除非它们被添加到客户端的信任库中)?
在本地拥有有效 SSL 的最简单的另一种方法是什么,所以我不需要配置客户端(客户端信任库)?
我们可以将证书固定视为可信 CA 的替代品吗?我在某处读到它只是另外所以这意味着证书链首先需要有效,然后你可以固定它吗?
我也越来越想这个想法是否可行。因为那时我们会看到更多使用这种技术。每个人都会生成自签名证书并将其固定...并在 CA 受信任的证书上节省几美元...或者我对整个概念的错误或正确之处是什么?
HPKP 不会取代正常的验证。相反,它是正常验证的补充。因此,如果由于证书是自签名证书而导致正常验证失败,HPKP 将无济于事。
是的,HPKP 只是宣传给定 x.509 证书的签名。浏览器(或任何网络客户端)只是在规定的时间段内缓存它,然后在进一步访问期间验证此签名。
本地主机名是主机名,与其他主机名一样。即使它很短。即使它有一个本地 TLD。问题是 - 您的客户端如何解决它以及它在
Host:
HTTP 请求的标头中请求什么。如果它将主机foobar解析为正确的 IP,然后Host:
在 HTTP 请求中提出此问题,并且自签名证书将其 CN 设置为foobar,则整个方案开始工作。不,他们没有。但是,不知何故,您的 Web 客户端应该有一种信任服务器证书的方法。要么将其放入受信任的服务器证书列表中,要么创建例外(这实际上与以前相同),要么创建本地 CA 并使用本地 CA 证书签署服务器证书。自签名服务器证书只是一种跳过本地 CA 创建的方法。顺便说一句,所有官方CA 都使用自签名证书作为其公钥基础设施的根点。这是创建 CA 的合法方式。官方CA 只是将证书添加到最知名软件(如操作系统、浏览器等)的信任库中的CA。协商添加需要花钱,这就是为什么它们中的大多数不是免费的。
为您拥有的每项服务获取自签名证书。如果您只有很少的此类服务,则处理自签名证书,如果有几十个,则创建本地 CA。还有一种合法的免费方式来获得公开接受的 X.509 证书——只需使用LetsEncrypt证书颁发机构——它是免费的。但是,它们不提供通配符证书 - 带有 的证书
*
,如果您有大量服务,这可能是个问题。没有。当有人冒充目标 CA 时,证书固定是针对中间人攻击的对策。为此,“某人”必须已经将他的根 CA 证书放入您的信任库,但这是另一个问题。
你绝对是。
经过进一步的研究,我真的很想深入研究实际的规范。
所以 RFC 7469 说:
所以现在官方很清楚,首先需要进行适当的 SSL 握手(包括验证认证链),然后才能进行 HPKP ......