可能很多人对HTTP Public Key Pinning (HPKP)已经有所了解,也有少数网站已经开始部署HPKP用来防止攻击者使用CA错误签发的证书进行中间人攻击。但HPKP由于部署难度非常大,而且不合适的部署会影响网站的访问甚至弄垮一家公司,所以,HPKP的使用率一直不理想。DNS Certification Authority Authorization (DNS CAA)则用另一种实现方法解决了这个问题。
DNS CAA通过添加一条DNS CAA记录,限制可签发该域名证书的CA,从而实现防止攻击者使用其他CA错误签发的证书进行中间人攻击。相比HPKP,DNS CAA的实现更加简单方便,但缺点也很明显。HPKP可以根据需要,固定不同级别的证书,比如可以固定网站现有的证书来实现最高的安全性,也可以固定CA的中间证书,从而保证网站的可访问性,如果你高度信任CA的根证书,甚至还可以固定根证书。而DNS CAA却只能选择一家或几家信任的CA为其签发证书,效果类似于HPKP固定CA的证书。所以,相比HPKP的高部署难度,DNS CAA是一种非常好的折衷方案,并且,它可以和HPKP同时部署。
接下来讲讲如何部署DNS CAA。如果DNS服务提供商有提供CAA记录,那么非常简单,设置一条CAA记录即可,例如Let’s Encrypt的CAA记录。
example.org. CAA 0 issue "letsencrypt.org"
也可以增加以下内容,在发现攻击者使用CA错误签发的证书进行中间人攻击时发送邮件告知。
example.org. CAA 0 iodef "mailto:[email protected]"
但是,现在支持CAA记录的DNS服务提供商还很少,我知道的只有Google Cloud DNS、DNSimple,不过随着Qualys SSL Labs增加对DNS CAA的检测,相信很快会有更多的DNS服务提供商会增加对CAA记录的支持。
如果要自己部署DNS服务来实现DNS CAA,目前BIND ≥9.9.6, PowerDNS ≥4.0.0, NSD ≥4.0.1, Knot DNS ≥2.2.0都已经对其提供较好的支持。
发表评论