什么是HTTP Public Key Pinning(HPKP)?

  • Post category:云计算

HTTPPublicKeyPinning(HPKP)是一种增强Web应用程序的安全性的技术,它利用浏览器的公钥证书来验证服务器的身份,以减少中间人攻击的风险。

在实现HPKP的过程中,网站管理员需要将浏览器信任的公钥证书指定为信任的证书,这种证书包括受信任的根证书以及网站的中间证书。这些证书的公钥将被保存在浏览器的内存中,用于验证服务器的身份。

在HTTP响应头中设置HPKP,可以确保浏览器仅连接到具有网站指定的SSL/TLS证书的服务器,并拒绝连接到使用不同证书的网站,从而有效降低了风险。

以下是设置HPKP的步骤:

1.生成公钥证书,并在服务器端进行配置。

2.在HTTP响应头中添加HPKP pin-sha256 指令,以便比较浏览器在进行校验时的证书HASH值。

3.设置 max-age 指令,用于指定浏览器缓存 HPKP 的时间。

以下是两个使用HPKP的示例:

示例1:在Nginx中使用HPKP

在Nginx的SSL配置中,添加如下代码:

add_header Public-Key-Pins 'pin-sha256="gC5586v123CNi10aiE96Di57GCDPGPRwNHSLowghYLg="; max-age=63072000';

其中, gC5586v123CNi10aiE96Di57GCDPGPRwNHSLowghYLg= 是证书的哈希值。

示例2:在Apache中使用HPKP

在Apache的VirtualHost或者.htaccess中添加如下代码:

Header always set Public-Key-Pins "pin-sha256=\"gC5586v123CNi10aiE96Di57GCDPGPRwNHSLowghYLg=\" ; pin-sha256=\"8/b+wJ+Nkra1wNvK+OXtE8XtBZoFpJ+IoPavW11to8Q=\" ; max-age=63072000; includeSubDomains"

其中, gC5586v123CNi10aiE96Di57GCDPGPRwNHSLowghYLg=8/b+wJ+Nkra1wNvK+OXtE8XtBZoFpJ+IoPavW11to8Q= 是两个不同证书的哈希值。

在设置好HPKP之后,服务器的SSL/TLS证书必须保持不变,否则将会产生HPKP错误,导致网站被浏览器误判为不可信。

需要注意的是,HPKP的使用需要谨慎操作,若证书出现错误或者网站重新生成证书后未及时更新指定证书的哈希值,将会导致用户无法访问该网站,因此,在应用HPKP的过程中应该加强监控和管理。