HPKP有什么作用?

  • Post category:云计算

HPKP(证书钉选公钥固定)是一项基于HTTP协议的安全增强标准,通过使用预设置的公钥或其哈希值来验证网站所使用的SSL/TLS证书的公钥。HPKP用于防止恶意用户中间攻击和防止证书欺骗攻击。它可以让客户端快速发现无效或恶意的证书,并防止服务端误用证书。以下是HPKP的作用。

HPKP的作用

1. 预防中间人攻击

HPKP可以防止一种称为“中间人攻击”的攻击方式。中间人攻击是指攻击者拦截网络通讯中的数据,然后在客户端和服务器之间建立一个虚假的连接,利用客户端和服务器之间的通讯重放攻击所获得的信息,实则以该形式规避掉SSL/TLS加密保护。

在正常的HTTPS通讯中,客户端与服务器之间的通讯是通过CA颁发的受信任的SSL/TLS证书来保护通讯的。而中间人攻击中,攻击者会伪造一个与CA签发的证书相同的证书,并将其发送给客户端,从而把自己伪装成服务器。由于攻击者拥有了客户端与服务器之间的通讯信息,所有客户端无从区别真正的SSL/TLS证书和伪造的SSL/TLS证书。这种情况会导致客户端把敏感信息发送到攻击者的服务器,从而破坏网络安全。

而采用HPKP技术,服务器可以向客户端预先推送信息,告诉客户端本次通讯涉及到的SSL/TLS所使用的公钥以及哈希值,客户端接收到推送后可以比较这些值和浏览器缓存中的信息是否相符,如果不同,则认为网站证书被篡改了。这样可以有效防止中间人攻击和 SSL/TLS证书伪造。

2. 防御DNS污染攻击

HPKP还可以防御DNS污染攻击。DNS污染攻击是指攻击者通过篡改域名系统(DNS)的解析结果将网络数据流重定向到错误的地址。在DNS污染攻击中,攻击者可以通过篡改DNS请求来把客户端的请求发送到恶意网站,以此来收集用户的输入数据。这样的攻击方式是危险的,但是在采用HPKP之后,攻击者无法伪造或更改哈希值,所以,能够有效地预防DNS污染攻击。

HPKP的示例1

下面是一个使用HPKP功能的HTTPS请求头示例:

Strict-Transport-Security: max-age=31536000; includeSubDomains; pin-sha256="abcdefghijklmnop1234567890"

在这个例子中,一共有三个指令。

  • max-age=31536000 指定浏览器缓存这条策略多久,单位为秒,一年就是31536000秒。
  • includeSubDomains 是HSTS的一个参数,表示此次设置的HSTS规则将对子域名也生效。如果没有该参数,则只对当前域名有效。
  • pin-sha256 指定了证书的公钥的哈希值。

HPKP的示例2

Public-Key-Pins-Report-Only: max-age=2592000; pin-sha256="rsa-bits";
        pin-sha256="second-public-key-hash"; 
        report-uri="https://example.com/some-report-uri"

在这个示例中,浏览器只会报告这些信息到设置了report-uri的地址,而不是强制执行这些约定。

其中,Public-Key-Pins-Report-Only指令告诉浏览器执行HPKP的策略,但不强制执行。这对于测试和调试很有用,因为它允许站点管理员在允许访问之前调整她的PIN设置。而设置report-uri则用于报告浏览器检测到的不符合HPKP约定的情况。