阿里云 CDN HTTPS 最佳实践——OCSP Stapling(四)

点击有惊喜


背景

下图是互联网 PKI 证书的生命周期:

阿里云 CDN HTTPS 最佳实践——OCSP Stapling(四)_第1张图片

对于一个可信任的 CA 机构颁发的有效证书,在证书到期之前,只要 CA 没有把其吊销,那么这个证书就是有效可信任的。有时,由于某些特殊原因(比如私钥泄漏,证书信息有误,CA 有漏洞被黑客利用,颁发了其他域名的证书等等),需要吊销某些证书。那浏览器或者客户端如何知道当前使用的证书已经被吊销了呢,通常有两种方式:CRL(Certificate Revocation List,证书吊销列表)和 OCSP(Online Certificate Status Protocol,在线证书状态协议)

  1. CRL
    CRL 是由 CA 机构维护的一个列表,列表中包含已经被吊销的证书序列号和吊销时间。浏览器可以定期去下载这个列表用于校验证书是否已被吊销。可以看出,CRL 只会越来越大,而且当一个证书刚被吊销后,浏览器在更新 CRL 之前还是会信任这个证书的,实时性较差。在每个证书的详细信息中,都可以找到对应颁发机构的 CRL 地址。
  2. OCSP
    OCSP 是一个在线证书查询接口,它建立一个可实时响应的机制,让浏览器可以实时查询每一张证书的有效性,解决了 CRL 的实时性问题,但是 OCSP 也引入了一个性能问题,某些客户端会在 SSL 握手时去实时查询 OCSP 接口,并在得到结果前会阻塞后续流程,这对性能影响很大,严重影响用户体验。(OCSP 地址也在证书的详细信息中)

OCSP Stapling 就是为了解决 OCSP 性能问题而生的,其原理是:在 SSL 握手时,服务器去证书 CA 查询 OCSP 接口,并将 OCSP 查询结果通过 Certificate Status 消息发送给浏览器,从而让浏览器跳过自己去验证的过程而直接拿到结果,OCSP 响应本身有了签名,无法伪造,所以 OCSP Stapling 既提高了效率也不会影响安全性。另外服务器有更好的网络,能更快地获取到 OCSP 结果,同时也可以将结果缓存起来,极大的提高了性能、效率和用户体验。

实现

Tengine 开启 OCSP Stapling 的主要配置是:

ssl_stapling               on;

但是,对于阿里云 CDN 这种一个 server 块接入很多域名和使用动态证书的场景就不能简单的这么配置了,必须在 lua 中根据实际使用的证书去所属 CA 查询 OCSP 接口,获取 OCSP 结果的相关 lua ffi 接口在 lua-nginx 模块中已经有实现,我们需要做的就是异步获取 OCSP 结果和对结果进行缓存。该功能目录在 CDN 配置管理后台已经可配了,后续会开放到用户控制台。

阿里云 CDN HTTPS 最佳实践——OCSP Stapling(四)_第2张图片

开启 OCSP Stapling 后,抓包验证的结果如下:
阿里云 CDN HTTPS 最佳实践——OCSP Stapling(四)_第3张图片


点击有惊喜

阿里云 CDN HTTPS 最佳实践——OCSP Stapling(四)_第4张图片

你可能感兴趣的:(阿里云)