安全相关

OCSP stapling

2020-04-19  本文已影响0人  aneirin

当访问HTTPS的网站,网站会给浏览器返回证书,证书中包含了公钥、证书过期时间等信息,这些信息被证书的签发者(即CA)使用自身私钥签名,浏览器有这些CA的根证书且相信这些CA,经过CA签名过的网站证书,浏览器是相信的。当浏览器收到网站返回的证书后,查看证书的过期时间,如果证书已过期,浏览器直接拒绝。
一切看起来都很美好,但有一些特殊情况存在,比如网站私钥泄露,此时必须有一种方法,能够人为标记证书无效,即使证书在有效期内。早期,CA通过CRL(certificate revocation lists)来完成这项工作。CRL就像一个公告牌,问题证书会被更新在上面。浏览器在HTTPS连接建立前需要查询证书签发CA的CRL,以保证服务器返回的证书是真实有效的,很明显这是件低效的工作,特别当CRL变得很长时,查询耗时会非常长。
为了解决上面的问题,OCSP(Online Certificate Status Protocol)出现了,CA不再需要维护CRL这种冗长的列表,它仅需要维护一个简单的HTTP服务器---OCSP Responders。浏览器在得到网站的证书后,通过证书中提供的信息(如下图),请求OCSP Responder就可以得到证书的状态信息,时间复杂度从原先的O(n)变成了O(1)。


ocsp URL

OCSP相对于CRL确实效率提高不少,但引入了下面问题:

SSLStaplingCache shmcb:/tmp/stapling_cache(128000)
<VirtualHost *:443>
SSLEngine on
SSLProtocol all -SSLv3 -SSLv2
SSLCertificateFile /path/to/your_domain_name.crt
SSLCertificateKeyFile /path/to/your_private.key
SSLCertificateChainFile /path/to/CA.crt
SSLUseStapling on
</VirtualHost>

(Apache web服务器有个问题,当与CA Responder沟通出现超时等网络问题时,浏览器会删掉已经缓存的stapling信息,直接返回空的stapling信息或者错误的stapling信息)
OCSP stapling也不是完美的,它没有解决soft-fail,Stapling在服务器端实现,客户端不知道服务器是否支持stapling。如果攻击者提供了一个伪造的证书但没有OCSP stapling信息,客户端不清楚服务器是否支持stapling,所以它会像原来一样去Responder那里查询信息,此时攻击者可以阻塞浏览器到Responder之间的连接,那么浏览器就会信任攻击者的证书。OCSP Must-Staple可以解决这个问题,使用该技术需要重新配置网站证书。它通过证书的一个扩展字段实现,当浏览器收到有该扩展字段的证书,但是网站却没有返回stapling信息,浏览器会直接拒绝该证书。
参考文档:
https://www.digicert.com/kb/ssl-support/apache-enable-ocsp-stapling-on-server.htm
https://www.ssl.com/article/page-load-optimization-ocsp-stapling/
https://blog.apnic.net/2019/01/15/is-the-web-ready-for-ocsp-must-staple/

上一篇下一篇

猜你喜欢

热点阅读