即将到期的根CA和传统客户端的末日

2020-06-08 21:21:53

经常阅读的读者会知道,我在CA/PKI领域非常活跃,甚至提供了一个为期两天的关于这个主题的高级培训课程。在过去一年左右的时间里,我一直关注着一个潜在的大问题正在逼近地平线,就在前几天,我看到了风暴袭击海岸的初步迹象。

就在我们深入讨论之前,我想澄清一些术语,这样我们就都达成了一致。CA是一个证书颁发机构,负责颁发证书以便您可以在您的网站上使用HTTPS。我说了很多关于让谁是最大的CA之一的加密,但你也可能认识像科莫多,塞蒂戈,DigiCert等人的名字。PKI或公钥基础设施用于在线验证用户和设备。今天,我将谈论我们称为Internet PKI的一个子集,它指的是用于向网站颁发证书以便我们可以在浏览器中对其进行身份验证的公共CA的集合。

为了使浏览器可以对网站进行身份验证,它所连接的服务器必须向其提供有效的证书链。典型的链如下所示,但请注意,一个链中可以有多个中间证书。您可以在有效链中看到的最小证书数为3。

根CA证书是CA的核心,它确实嵌入到您的操作系统或您选择的浏览器中,它实际存在于您的设备上。根CA颁发中间CA,中间CA进而向您的网站颁发最终实体证书(也称为叶证书或服务器证书)。叶证书和中间证书是从服务器传送到客户端的,而客户端已经拥有根证书,因此使用此证书集合可以构建链并验证网站的身份。这是一个令人难以置信的简短的概述,关于这是如何工作的,更多的细节,你应该认真查看我们关于这个主题的培训课程,但就目前而言,这应该足以让我们继续下去。

这个问题是我们所有人都会定期处理的问题,没有太多问题:证书有过期日期,需要更换。我最近写了一篇文章,关于将于2020年9月实施的新的生命周期限制为1年,这意味着我们将至少每12个月更换一次服务器证书。这一限制只适用于服务器证书,但我们获得的安装在我们网站上的证书不适用于CA证书。

CA证书受与我们的证书不同的一组规则管理,因此它们具有不同的生存期限制。看到寿命为5年的中间证书和寿命为25年的根证书是非常常见的!这意味着中级证书的过期时间有一定的规律性,但这通常不是问题。因为中级证书是由网站提供的,所以它是相当动态的,而且由于网站正在定期更新他们的证书,更换中间证书并不会带来太多额外的负担。与根CA证书不同,它可以很容易地与服务器证书一起更改。

正如我刚才所说,根CA嵌入到客户端设备本身中,通常嵌入在操作系统中,也可能嵌入到浏览器或其他软件中。更改根CA不是网站可以控制的,它需要在客户端上安装更新,可以是操作系统更新,也可以是软件更新。我想知道我们在更广泛的世界中保持操作系统/软件更新的记录是什么?

有些CA现在已经存在很长一段时间了,我们说的是20-25年!这也恰好意味着一些原始的Root CA也即将结束他们的自然生命,他们的时间几乎到了。对于我们大多数人来说,这根本不是问题,因为CA已经创建了新的根证书,这些证书多年来一直以操作系统和浏览器更新的形式分发到世界各地。然而,对于我们中的一些人来说,那些已经多年没有安装操作系统或浏览器更新的人,很好地说,这是一个问题……

这个问题最近得到了完美的证明,准确地说,是在2020年格林尼治标准时间5月30日10:48:38。准确的时间是AddTrust External CA Root过期,并随之而来的是我期待了一段时间的麻烦的第一个迹象。

截至UTC时间10:48,部分用户无法进行网络挂钩投递。我们正在调查,并将在这里发布最新消息。

-条纹状态(@stripestatus)2020年5月30日。

有一大堆东西因为这个Root CA到期而崩溃,Andy Ayer有一个很好的列表,在这里跟踪了相当多的东西。问题是,受影响的客户端只安装了旧的(现已过期)AddTrust Root CA证书,并且由于它们尚未更新,因此尚未收到取代它的新版本。如果没有这个新版本,事情就不会正常工作,应该有效的服务器证书将被正确地视为无效并被客户端拒绝。

对于在这个特定领域工作的许多人来说,这个特定的问题并不令人惊讶,我在我们的TLS培训课程中谈论这个迫在眉睫的问题可能已经有两年了,但对许多人来说,这会让他们感到惊讶,上面链接的所有事件都证明了这一点。

另一个很好的例子是即将到来的Root CA过渡,该过渡将由Slet的Encrypt执行。早在2019年4月,我就写过这方面的文章,当时“让加密”计划在2019年7月从他们的IdenTrust交叉签名链过渡到他们自己的ISRG根链,但这并没有实现。

由于担心ISRG在Android设备上的根传播不足,我们决定将开始为我们自己的根提供连锁服务的日期从2019年7月8日推迟到2020年7月8日。

让加密不得不推迟过渡,因为我们称之为根传播的问题,或者更具体地说,缺少根传播,在这种情况下,根CA并没有广泛分布到所有客户端上。让加密当前使用交叉签名的中间证书,并向下链接到IdenTrust DST根CA X3证书。该根证书将于2021年9月30日到期,并早在2000年9月颁发,因此它被广泛分发或传播,因为大多数设备在过去20年中都进行了更新,因此它们安装了IdenTrust根证书。这就是说,让加密需要在到期之前离开它,计划迁移到他们的根CA,ISRG根X1。

ISRG根于2015年6月4日颁发,并开始审批成为CA的过程,该过程于2018年8月6日完成。此时,所有客户端都可以通过操作系统或软件更新使用根CA,他们只需安装更新即可。他们所需要做的就是.。

以下是问题的核心。新的let‘s加密根CA创建于2015年,并于2018年完全批准发行。现在,大约2年过去了,如果设备自2018年8月以来没有更新过,它是如何知道这个新的Root CA的?答案是:它不会。这就是为什么让加密推迟到他们自己的ISRG根CA的原因,并且仍然在为向下链接到IdenTrust根的中间层提供服务,但是该解决方案只会持续到IdenTrust根到期。他们为自己争取了一些时间,但并不多。要测试您的当前客户端是否安装了ISRG RootX1,请尝试并加载此测试站点:https://valid-isrgrootx1.letsencrypt.org/。

如果您可以在没有警告的情况下进行连接,那么这可能意味着您一切正常,但仅仅因为它确实连接了它并不意味着您一定是正常的。我不会深入到链条建立和客户端做它想做的事情的复杂性,或者你在公司网络上使用终止TLS的设备的可能性,因为这里有一堆需要考虑的其他事情,需要数百个字。我所能说的就是,你可能还好,如果你想花几个小时谈论这件事,嗯,我有一个培训课程!

绝对不会,这就是问题所在。我们现在到了一个时间点,在未来几年内有大量CA根证书到期,原因很简单,因为自加密Web真正启动以来已经过去了20多年,而这就是根CA证书的生存期。正如我们已经看到的,这将在很大程度上让一些组织措手不及,但也有一些组织已经看到了地平线上的问题,并正在采取一切可能的措施来解决它。

通过我提供的TLS培训和我所做的各种咨询工作,我已经与一些实际上已经解决了这个问题的组织合作,并在他们力所能及的地方找到了解决方案。我有幸被允许谈论的组织只有一个,那就是BBC,我们在英国的国家广播公司。他们有一个非常有趣的问题,因为他们在很多不同的设备上进行了大量的在线流媒体。现在,移动应用和浏览器通常不是太大的问题,但是智能电视,嗯,它们是完全不同的游戏。

我相信在座的许多人都知道智能电视并不像我们希望的那样聪明。一般说来,我的电视现在唯一一次更新是删除一个功能,而不是增加一个功能……。但是,这种缺乏更新的情况确实带来了另一个相当有趣的问题。智能电视基本上就是一台精简版的Linux计算机,一台可以进行TLS通信的计算机,它有一个Root CA存储,它的问题和我刚才讨论的完全一样。电视上安装的根证书正在滴答作响,如果没有更新,它们永远不会被更换……。

我的一个非常棒的朋友,尼尔·克雷格,是BBC的首席技术架构师,他给我提供了那里一起事件的一些具体细节,并允许我与你们分享。在最近的服务器证书更新中,他们获得了由GlobalSign R5 Root颁发的新证书,该根证书的有效期为2012年11月13日至2038年1月19日。问题是,一些电视太过时了,他们没有安装2012年发行的R5Root CA!这意味着这些电视将拒绝链接到该根CA的证书,因此,流媒体应用程序在电视上停止工作!在2019年/2020年,我们遇到了一个问题,一个成立8年的Root CA仍然没有成功地进入智能电视的很大一部分。不过,BBC很聪明,他们可以部署一个解决方案,这意味着提供附加的中间证书,这些证书链接到不同的GlobalSign Root CA。GlobalSign R3根的有效期为2009年3月18日至2029年3月18日,R1根的有效期为1998年9月1日至2028年1月28日。“由于R1 Root可以追溯到目前为止,而且有另一条信任路径可以建立到它上面,BBC能够解决这个问题,那些过时的电视也得到了修复,因为它们安装了旧的R1 Root。下面是OpenSSL s_client-connect www.bbc.co.uk:443-showcerts的修剪输出,以及目前Windows上Chrome的显示效果。它们在WWW上使用相同的解决方法,因此我们在那里检查链比在iPlayer API端点上更容易。

证书链0 s:C=GB,ST=London,L=London,O=British Broadcast Corporation,CN=www.bbc.co.uk I:C=BE,O=GlobalSign NV-sa,CN=GlobalSign ECC OV SSL C

这里我们看到的是GlobalSign ECC OV SSL CA 2018中级颁发的www.bbc.co.uk证书。该中间层的授权密钥ID为3de629489bea07ca21444a26de6eded283d09f59,这意味着它可以链接到以下三个证书中的任何一个:

GlobalSign ECC根CA-R5(根)有效期2012年11月13日至2038年1月19日。

GlobalSign ECC根CA-R5(中级)有效期2019年6月19日至2028年1月28日。

GlobalSign ECC根CA-R5(中级)有效期2018年11月21日至2029年3月18日。

这里的问题是列表中的第一个问题,即R5根。这是2012年发布的较新的证书,旧的智能电视还没有安装,所以BBC不能只退还www.bbc.co.uk和GlobalSign ECC OV SSL CA 2018年的证书,他们必须提供更多的中间产品,以便客户可以建立替代链。通过提供上面列表中的第三个证书(R5中间证书),客户端可以围绕丢失的R5Root构建一个链,因此链继续。该r5中间证书的授权密钥ID为8ff04b7fa82e4524ae4d50fa639a8bdee2dd1bbc,这意味着它可以链接到以下三个证书之一:

在这一点上,BBC可以结束链,并将www.bbc.co.uk、GlobalSign ECC OV SSL CA 2018和GlobalSign Root CA-R5(中间)提供给客户端,以使其锚定在GlobalSign Root CA-R3(Root)上,但同样,由于R3 Root可能不存在,发布日期为2009,并有几年的批准和分发时间,这可能仍不能解决问题。所以,另一个中间人来解决这个问题!他们再次提供上述列表中的第三个证书,即GlobalSign Root CA-R3(中间),该证书的授权密钥ID为607b661a450d97ca89502f7d04cd34a8fffcfd4b。这意味着它可以链接到以下两个证书之一:

现在我们终于要有所进展了。第一个证书有一个友好的名称GlobalSign Root CA-R1,它是一个根CA,它足够旧,可以安装在多年没有更新的旧设备上,并且Smart电视可以成功地建立一个链条来锚定。这意味着不是提供普通的连锁店服务,而是提供以下连锁店:

www.bbc.co.uk(叶)GlobalSign ECC OV SSL CA 2018(中级)GlobalSign根CA-R5(中级)GlobalSign根CA-R3(中级)

注:当我开始写这个博客的时候,我不知道我们会在兔子洞里走到多深的地方,但我们到了这里。不管怎样,前进吧!

在最好的情况下,BBC在这里所做的就是将问题推迟到2028年R1根到期。在这一点上,他们可以缩短链条,尝试锚定在R3Root上,R3Root将于2029年到期,并希望智能电视已经更新足够多,以便在我们到达那里时安装Root CA……。

BBC还可以考虑切换到另一个具有根CA的CA,该CA的有效期稍微长一些,可能是2030年或2031年,但这是一个反复出现的相同问题。这里的解决方案,真正的解决方案,是客户端需要更新。智能电视制造商可能会在几年内发布更新,但如果你想解决这个特别的问题,我们谈论的是十年或更长时间。我已经很舒服地有了一台电视10年了,我肯定不会为了更新安装在我电视上的Root CA而贡献一大堆电子垃圾!!

如果您的设备已连接到互联网或在营销材料中的某个位置带有单词Smart,则可能需要考虑根CA过期问题,这是无法避免的。如果设备不更新,则根CA存储将随着时间的推移而变得陈旧,最终问题会浮出水面。多久就会出现问题,问题会有多大,这将取决于Root CA商店上次更新的时间,但仅仅因为一台设备是在2018年制造的,并不意味着该软件还没有过时6年多。

考虑到BBC所遇到的所有问题,如果智能电视制造商想要获得BBC对盒装iPlayer的批准,他们现在要求考虑这些问题。Microsoft也已采取措施解决Windows中的此问题,您的操作系统现在可以在需要时获得Root CA Store更新。展望未来,这个问题看起来确实开始在未来得到解决,但它并没有为过去和现在解决。

回到之前的帖子中,我提到了let的加密根迁移被延迟了,他们的原因是缺少根传播,他们特别提到了Android设备。我做了一些挖掘,发现了有关Android生态系统在安装的操作系统版本方面是什么样子的数据。

这表明有很大一部分设备要么严重落后于更新,要么根本没有由供应商或用户进行更新(提示:它是供应商)。如果我们看看iOS的类似数据,那就完全不同了。

如果我是iOS用户,我不会太担心这个问题(我是),但看起来Android用户在不远的将来可能会有一些担忧!

更改您用来链接回旧根CA以保持设备存活的中间层是一回事,甚至将CA切换为选择寿命最长的传统根CA是另一回事,但这也意味着您不能使用现代CA(如果您愿意)。让我引用尼尔对我说的话:

我们确实不能在电视上使用像LE[让加密]这样的CA,因为它位于极少数的根存储中。

一个庞大的媒体和流媒体平台不能使用一个可怕的、完全自动化的、免费的CA,因为连接到他们服务的设备还不够现代化。是的,没错,你的尖端4K智能电视还不够现代。这听起来很疯狂,对吧?但这就是问题所在!

如果您在运营一项服务,或者想要构建一项服务,这将涉及到遗留的客户端考虑因素,您不能只是出去购买最酷、最新和免费的CA,您需要谨慎选择。您需要知道您的客户端在哪个平台上,他们正在使用哪个版本的信任存储,以及他们上次更新的时间,所有这些都是希望您能够找出哪些根证书在那里,以及使用哪个CA来颁发证书。这听起来很容易,但要弄清楚可能真的很痛苦。有些供应商,比如苹果,会提供他们目前的Root Store内容的数据,比如这里的iOS13,你可以回到过去一段时间,但这并不简单。CloudFlare有cfssl_Trust,它可以让您返回到2017年,并涵盖各种平台,但这也很容易不足以满足您的需求。事实上,这是一个令你担心的问题,那么你需要做一点工作才能弄清楚这一点,没有简单的方法。考虑到遗留下来的东西在互联网上的突出地位,我认为我们最好尽快解决这个问题。

知道您是否有这样的问题确实非常有用,而且有一个关于如何检测问题的令人惊讶的故事。当然,你可以对你所有的客户和他们的Root Store有更深入的了解,这是很困难的,或者你可以使用NEL。我写了一篇关于网络错误记录的介绍性博客文章,随后写了一篇网络错误记录:深度潜水。不过,这个博客的TLDR;是,当客户与您的站点有连接问题(包括证书引起的问题)时,您可以让他们向您发送反馈。这里是客户端可以报告的错误的一个非常小的子集。

tls.version_or_cipher_mismatch由于版本或密码不匹配,TLS连接已中止chtls.ad_client_auth_c。

..