HTTP Public Key Pinning (HPKP)是一种基于浏览器的安全策略,它可以将网站的公钥信息预置到用户的浏览器中,在用户访问该网站时,浏览器会比对网站的证书信息和预置的公钥信息,以保证证书的合法性,防止中间人攻击。然而,HPKP本身也存在一些风险,下面我们将详细讲解。
风险一:可信证书的过期可能导致网站不可访问
HPKP将网站的公钥信息预置到用户的浏览器中,一旦网站使用不同的证书或者公钥,用户的浏览器会将其视为不合法,从而拒绝连接到该网站。如果网站在进行证书更新或替换时出现问题,可能会导致网站无法访问。例如,某网站的HPKP头信息如下:
Public-Key-Pins: pin-sha256="abc123"; max-age=5184000; includeSubDomains
该网站使用了一个SHA256算法的公钥pin,有效期为60天。如果在60天之内进行证书更新,且新的证书公钥未变,则一切正常。但如果新的证书公钥发生了变化,浏览器会拒绝连接到该网站,导致该网站在更新或替换证书时无法提供服务。
风险二:HPKP可以被滥用
HPKP的一个关键特性就是,网站可以通过设置HPKP头信息,强制要求用户只能使用特定的公钥来访问网站。这一特性为攻击者提供了一个潜在的攻击手段,攻击者可以使用类似的方法,欺骗浏览器,要求用户只能连接到具有恶意公钥的网站。例如,攻击者可以伪造一个证书,将HPKP头信息添加到恶意网站的响应头中,以屏蔽用户的浏览器安全警告。这样,攻击者就可以监控用户的网络流量,并窃取敏感信息。
如何防范HPKP风险?
要使用HPKP而不会陷入风险,我们要在以下几个方面加强防范:
-
尽量避免在生产环境中测试新证书或不安全的证书。发生意外事件时,可能会导致网站无法访问。
-
不要设置过于严格的HPKP规则。过于严格的规则可能会导致网站在更新证书信息时出现问题,使其无法正常运行。
-
如果采用HPKP,请确保将备用公钥定期添加到HPKP头信息中。这样即使当前公钥失效了,浏览器也可以使用备用公钥来连接到网站。
-
如果可能的话,请使用内容传递网络(CDN)提供HPKP,以提高可靠性和安全性。
综上所述,虽然HPKP是一种强大的安全策略,但也存在一些风险。在使用HPKP时,我们应该认识到这些风险,并采取相应措施来降低风险。