06
2017
06

使用 OCSP Stapling 来优化 SSL 的速度与隐私安全


OCSP


服务器的 SSL 给客户端带来了一定的开销,其中一个开销是检查服务器的SSL证书的撤销状态。虽然这种特殊的开销在客户端而不是服务器端,但仍会影响到访问者眼中的网站性能。OCSP Stapling 允许客户端将这种开销转移到服务器,同时大大减少它的大小。


OCSP

OCSP 是在线证书状态协议,用于检查 X.509 数字证书或 SSL 证书的撤销状态,当浏览器通过 HTTPS 建立连接时,会执行几项检查,以确保一切安全。由服务器呈现的证书必须是正确的,由受信任的根证书签名,或者追溯到受信任的根证书的中间体,并且不能过期。检查表中的最后一项是证书尚未被撤销。如果主机的私钥泄密,攻击者可以使用该证书来模拟它们,或拦截和解密其流量。主机可以将受损的证书转换为新的证书,但这并不会阻止攻击者冒充的身份,证书仍然签名有效。因此,证书撤销检查是必须的。一旦浏览器确认所有初始检查完成,它将联系证书颁发机构,颁发证书的人员,并检查证书是否未被撤销。这引起了巨大的负担。每次客户端与站点进行安全连接时,浏览器将需要联系 CA 来检查颁发的证书的撤销状态。如果 CA 向某些高流量站点颁发证书,那么这将是一个非常大的请求处理。不仅如此,还有一些隐私问题。如果你想访问任何使用 SSL 的站点,你需要联系 CA 来检查颁发的证书的撤销状态。有问题的 CA 可以建立一个相当准确的访问网站的记录,这样不是太好。


解决方案

这两个问题的解决方案是 OCSP Stapling。而不是依赖于客户端来检查证书的吊销状态,使用 OCSP Stapling 可以将负担转移到主机服务器。定期地,主机将联系 OCSP 服务器并检索由 CA 签名的时间戳的 OCSP 响应。然后将此响应“装订”到主机证书并发送给客户端。客户端可以信任订阅的响应,因为它只具有很短的有效性,并由可信 CA 进行签名。这样可以防止客户端对 CA 进行 DNS 和 TCP 往返,以进行吊销检查,这意味着主机服务器可以向 CA 提出单一请求,并对所有请求进行相同的响应,直到其过期为止。现在,主机服务器不必每次连接客户端都需要进行 OCSP 请求,而是定期发出一个请求。这使得所有访问者的连接更快,并且仅在两个服务器,主机和 CA 上引入最小的开销。


在 nginx 上部署 OCSP Stapling

http{

ssl_stapling               on;

ssl_stapling_verify        on;

ssl_stapling_file          certificate/chziyue.pem;

resolver 8.8.8.8 8.8.4.4   valid=300s;

resolver_timeout 10s;


nginx.conf 文件中的这些都是设置 OCSP 装订所需要的。chziyue.pem 文件需要包含所有证书直到根证书。列出的 DNS 解析器是必需的,因为 nginx 需要进行外部请求。可以使用任何你喜欢的内容,上面的例子使用的是 Google DNS。一旦更新并重新加载了 nginx 配置,可以通过 Qualys SSL LABS 来进行检查查看 OCSP 是否已经成功部署。假设一切顺利,你的访问者现在可以获得 SSL 连接更小的开销。如果没有部署成功,也可以使用下面的方案来手动获取 stapling_ocsp 保存在服务器上,这样的好处是稳定,但需要在 stapling_ocsp 文件过期前及时的更新。


使用 openssl 命令来获取 stapling_ocsp,已本站的证书为例

openssl ocsp -issuer root.crt -cert chziyue.pem -url http://ocsp2.globalsign.com/gsalphasha2g2 -respout ./stapling_ocsp


root.crt 这里的根证书不需要包含网站证书

chziyue.pem 需要包含所有证书直到根证书

http://ocsp2.globalsign.com/gsalphasha2g2 是获取 stapling_ocsp 的地址

-respout ./stapling_ocsp 是将获取结果在当前目录下保存为 stapling_ocsp 文件


再 nginx.conf 配置文件中指定一下刚保存的 stapling_ocsp 文件路径,最后两行的DNS配置可以删除掉


http{

ssl_stapling             on;

ssl_stapling_verify      on;

ssl_stapling_file        certificate/stapling_ocsp;

ssl_trusted_certificate  certificate/root.crt;


这样就可以稳定的使用 OCSP Stapling 了。

« 上一篇 下一篇 »
 <