在2018年1月9日,Frans Rosén of Detectify给我们提交了一个报告。报告中指出,我们(签名证书时用于验证域名的)三个方法之一,TLS-SNI-01有漏洞。如果域名托管在那些允许任意上传证书的软件上,则非域名又有着,也有可能成功利用这种验证方法申请到证书。
得知这一消息后,我们立即关闭了TLS-SNI-01这种验证方式。一开始我们以为这只是一个临时性的措施。但是经过我们随后的研究发现,很多托管软件都有类似的问题。因此我们最终决定TLS-SNI在后续的新版签发过程中会持续禁用。
使用TLS-SNI进行证书续期将不会首次影响。所以如果你如果仅仅需要对证书进行续期,暂时你还不需要做什么。但是我们仍然建议您保持您的ACME客户端软件处于最新状态。
如果您使用Certbot的Nginx或Apache自动设置模式,那么你需要升级Certbot到最新的0.211.0版本,才能正常的给新域名申请证书。如果你使用的是certbot或者letsencrypt命令模式,那么可能使用的是操作系统自带的比较老的版本了。这种情况下,建议您使用certbot-auto,该软件提供最新时用于很多操作系统版本的Certbot。另外,如果您的WEB服务器80端口被屏蔽,即便是更新Certbot也无济于事。因为更新后我们将会将域名验证方式切换到HTTP-01验证方法,该方法依赖于80端口对外开放。所以我们推荐您开放80端口,并将所有的HTTP流量重定向到HTTPS上。
长远来看,我们计划在ACME规范中移除TLS-SNI-01和TLS-SNI-02(也有同样的问题)。IETF ACME工作组已经在开发新版本的TLS-SNI-03验证方法以解决这个问题。具体你可以前往邮件列表查看。不过要制定好并实现完标准TLS-SNI-03标准将会耗费很长的时间。所以暂时来看你只能使用HTTP-01或DNS-01两种验证方式。如果你能自动化的操作你的DNS服务器,那么DNS-01是比较推荐的,原因有二:其一是在您有多个前端服务器时也可以很好的验证,其二是后续的通配符证书验证只能使用DNS-01这种方式验证。
参考资料