存在使之成为可能的基本基础结构,该基础结构称为RFC6698中指定的基于DNS的命名实体身份验证(DANE)。它通过TLSA
资源记录来工作,该资源记录指定了终端实体或其链中的CA之一的证书或公钥(实际上有四种类型,有关详细信息,请参阅RFC)。
采用
但是,DANE尚未得到广泛采用。威瑞信(VeriSign)监控DNSSEC和DANE的采用情况,并跟踪其随着时间的增长:
为了进行比较,根据VeriSign的说法,大约有270万个DNS区域,这意味着所有区域中超过1%的区域至少具有一个TLSA记录。
我不能给出任何权威性的答案,为什么选择DANE,但这是我的推测:
DANE与证书吊销列表(CRL)和在线证书状态协议(OCSP)遭受相同的问题。为了验证所提交证书的有效性,必须联系第三方。HannoBöck 给出了很好的概述,为什么这实际上是一个大问题。归结为当您无法联系第三方时该怎么办的问题。在这种情况下,浏览器供应商选择了软失败(又名许可),这使整个事情变得毫无意义,Chrome最终决定在2012年禁用OCSP。
域名系统
可以说,DNS比CA的CRL和OCSP服务器提供了更好的可用性,但是仍然使脱机验证变得不可能。此外,DANE仅应与DNSSEC结合使用。由于正常的DNS在未经身份验证的UDP上运行,因此很容易出现伪造,MITM攻击等。采用DNSSEC比采用DANE更好,但仍远远没有普及。
借助DNSSEC,我们再次遇到了软故障问题。据我所知,默认情况下,没有主要的服务器/客户端操作系统提供可验证的DNSSEC解析器。
然后还有撤销的问题。DNSSEC没有撤消机制,而是依靠短寿命密钥。
软件支援
所有参与的软件都必须实现DANE支持。
从理论上讲,您可能会认为这将是加密库的工作,而应用程序开发人员将不必做很多事情,但事实是,加密库通常仅提供原语,而应用程序必须自己进行大量配置和设置(不幸的是,有很多方法可以解决问题)。
我不知道,例如,任何主要的Web服务器(例如Apache或Nginx)都已实现DANE或已计划这样做。Web服务器在这里尤为重要,因为越来越多的东西是基于Web技术构建的,因此它们通常是第一个实现的东西。
当我们将CRL,OCSP和OCSP装订进行比较时,我们也许可以推断出DANE采用的故事将如何发展。仅某些使用OpenSSL,libnss,GnuTLS等的应用程序支持这些功能。诸如Apache或nginx之类的主要软件花了一段时间才支持它,并再次参考HannoBöck的文章,他们弄错了,并且其实现存在缺陷。其他主要软件项目(如Postfix或Dovecot)不支持OCSP并且具有非常有限的CRL功能,基本上指向文件系统中的文件(不一定要定期重新读取,因此您必须手动重新加载服务器等)。请记住,这些是经常使用TLS的项目。然后,您可以开始研究TLS不太常见的情况,例如PostgreSQL / MySQL,也许它们最多提供CRL。
因此,我什至没有现代的Web服务器来实现它,大多数其他软件甚至都没有实现OCSP和CRL,这对于您5年的企业应用程序或设备来说是好运。
潜在的应用
那么,您实际上可以在哪里使用DANE?截至目前,还没有在普通的Internet上。如果您控制服务器和客户端,也许是一种选择,但是在这种情况下,您通常可以诉诸公钥固定。
在邮件领域,DANE受到了一定的欢迎,因为SMTP最长没有任何形式的经过身份验证的传输加密。SMTP服务器有时确实在彼此之间使用TLS,但没有验证证书中的名称是否实际匹配,它们现在开始通过DANE进行检查。