gitbook/Web漏洞挖掘实战/docs/477270.md
2022-09-03 22:05:03 +08:00

62 lines
9.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 大咖助场|数字证书,困境与未来
你好,我是范学雷。
先来做个自我介绍吧。我之前在Oracle做过首席软件工程师同时呢也是Java SE 安全组成员和OpenJDK 评审成员。如果你认识我的话,估计是因为我的极客时间专栏,我已经和极客时间合作第三季了,是《[代码精进之路](https://time.geekbang.org/column/intro/100019601)》《[实用密码学](https://time.geekbang.org/column/intro/100064801)》和《[深入剖析 Java 新特性](https://time.geekbang.org/column/intro/100097301)》的作者。安全领域本身是比较小众的,我一直有意做一些相关的分享,正好昊天的专栏有涉及加密有关的知识,在编辑同学的邀请下,就欣然前来助助阵。
这次我们讨论的话题,是关于数字证书的现实痛点,及其未来的发展走向问题。要想了解数字证书的现状,我们需要先来了解数字证书的背后逻辑和各路玩家。
## 数字证书的逻辑
数字证书主要的玩家主要涉及三个角色。第一个就是颁发证书的机构我们通常叫它CA也就是**证书权威机构**。第二个玩家是实用证书的持有者,我们通常叫它**证书的终端实体**。第三个玩家是证书的使用者,他们才是**证书的最终消费者**。
数字证书体系的设计,就是要帮助用户验证对方的身份,解决双方交流中的“对方是谁”或者“我在和谁说话”这个问题。从数字证书的角度出发,就是数字证书的消费者要通过验证数字证书,完成对数字证书持有者的身份认证。
可是,凭什么你有了一张数字证书,我就要信任你的身份呢?这个信任关系是怎么来的呢?这就要说说**证书权威机构**了。
证书权威机构,名字里虽然带着权威,但实际上,它可能并不是一个有权有威的机构。这个机构发布了一份认证实践声明,来说明自己做事的规则和流程。 你如果认可这份声明,并且信任它的执行流程,那么这个机构就是你信任的机构。当然,是否信任这个机构,是你的权利,如果你不信任它,它就一点也不威风。
乍一看,数字证书的最终消费者是互联网用户,并且可以选择是否信任一个证书权威机构,似乎有点上帝的味道。真实的情况是,数字证书的最终消费者不是证书权威机构的用户,而是数字证书的持有者,因为,数字证书的持有者才是给证书权威机构付费的实体。
通过这一点我们会发现,数字证书权威机构代表的是证书持有者的利益,而不是数字证书消费者的利益。数字证书持有者和数字证书消费者的利益,不一定总是一致的。如果出现利益冲突,数字证书消费者的利益不一定会被放在首位。**作为一个数字证书的消费者,我们无条件地信任一个证书权威机构,但是它却不代表我们的利益,这的确有点讽刺的意味。**
事实上,对于消费者而言,如果一个证书权威机构能够按照它的声明和规则做事,我们也许少一些担忧。但是,声明的背后,往往可能**是一些有意或者无意的错误,也可能是一定存在漏洞的数字化代码**。不论是哪一种问题,都说明了**证书权威机构并不总是能够按照它的声明做事。**
## 案例
我们知道在数字的世界里能够代表Google的数字证书表示的就是Google的身份。如果这个证书的持有者不是Google这就表明这是一个假冒的身份。数字证书本来就是要解决身份认证的问题。现在不适当的数字证书披上了一层合法的外衣可以堂而皇之的以假冒的身份玩耍各种欺骗的手段。这样的例子屡见不鲜比如说没有经过Google的允许证书权威机构就颁发能够代表Google的数字证书。
2011年7月10日证书权威机构DigiNotar未经Google许可给Google发了数字证书其中是否存在某种阴谋我们不得而知。2011年8月28日该事情被披露了出来过了不到一个月的时间DigiNotar就宣布破产了。这种未经许可给Google发了数字证书的证书的故事不是第一例也不会是最后一例。甚至有的证书权威机构趁着平安夜的假期和万家灯火的祥和气氛像圣诞老人一样给Google颁发了一张不属于它的证书作为圣诞节的礼物。
我们可以肯定的是这种不期而至的礼物并不只是对Google一个机构青睐有加。我们看到这么多假冒Google的数字证书披露出来只是Google影响力和强大技术能力的一个侧面印证。普通的联网用户甚至是很多的机构并没有对应的能力去鉴别那些披着合法外衣的、假冒的数字证书。
发生类似的事情Google无疑是受害者之一但是受损失最大的一定是我们这些互联网用户。我们的利益和隐私可能会在这样的有意无意中遭受到巨大的损失而且我们还不明真相不知所以不知所终。
为什么DigiNotar给Google发一张数字证书就能影响到我们的利益和隐私呢这还要从我们使用证书的习惯说起。
尽管证书是互联网安全的基石,但在一般情况下,我们自己并不直接使用证书,而是通过代理人,也就是浏览器使用证书。所以,如果不是安全专业人士,我们根本不会关心数字证书,当然就不会知道谁是证书权威机构,以及该信任哪些证书权威机构。这些决策,都是我们的代理人替我们做出来的。
如果你能够阅读浏览器信任的证书权威机构,你可以看到一个长长的列表(通常是几十个或者上百个机构)。我敢说,即便你是资深的安全专业人士,也很难了解每一个证书权威机构。这些证书权威机构分散在世界各地,归属于不同的国家和地区,代表着不同的利益和势力。
想象一下,如果这个长长的列表里,每一个证书权威机构都有着相同的权威,它颁发的每一个证书我们都无条件信任,这也就意味着,在这个长长的列表里,只要有一个证书权威机构捣乱,整个数字证书的逻辑就崩塌了。**要求每一个证书权威机构都完美地按照它的声明和规则做事,不允许出现异数,这实在是有违基本常识的假设。**
## 探索
类似于DigiNotar这样的案例在我们的头上狠狠地敲了以榔头足够被我们打晕。当我们醒过来的时候揉揉脑袋上久久不能消退的大包才认识到我们太天真。我们选择信任证书权威机构但是它们并不都是可以信任的或者说没有一个是可以无条件信任的。让人更加不安的是作为用户我们如果想继续使用互联网除了继续信任证书权威机构以外并没有其他的选择。这样在“不可信任”和“不得不信任”中间一对矛盾就凸显出来。
当我们认识到矛盾的时候,就是变革要发生的时候。**既然已经认识到了证书权威机构并不可信,但是又没有合适的办法摆脱它,我们就要想办法把它关在笼子里,小心地看护它、监管它。**如果一个证书权威机构没有按照它的声明和规则做事我们最好第一时间就知道。解决的办法就是增加证书的透明度Certificate Transparency
如果一个证书权威机构颁发了一张证书这张证书立即就会被公开地记录在案。任何机构都可以查阅在案的记录。有了这个记录Google就可以查阅还有没有证书权威机构未经授权就擅自给自己发了一张证书了。这就是证书透明度的机制。
遗憾的是,如果一个证书权威机构颁发了一张证书,但是不公开记录在案,那么这张证书就还是没有透明度,还是可以兴风作浪。证书透明度的机制,帮助乖孩子解决掉了无意识错误的问题, 但是并没有让坏孩子产生错误意识。**证书透明度的机制,增加了监管,但是并没有解决最根源的问题。**
当我们认识到毫无退路的时候,还有一句话叫做“向死而生”。既然证书权威机构并不可信,它还有存在的必要吗?这是一个一直拷问着互联网安全架构设计者的问题。十年前,业界就已经开始做这样的尝试了。
其中影响最大的就是把数字证书和DNS绑定把证书存放在DNS的记录里。当我们解析域名的时候也就获得了这个域名对应的数字证书。只要DNS的安全逻辑没有问题这个数字证书也就没有问题、值得信任的。
这样,一个域名的所有者就不再需要证书权威机构给自己发证书了,颁发证书的工作,他自己就能完成。而且,在这样的框架下,证书权威机构即使给自己发证书,也不会被采用,威胁自然也不会发生。这样,数字证书就真的完全掌控在它的持有者手里了,既不能被修改,也不能被假冒。同样地,数字证书的消费者也就有了更清楚、更直接的信任关系。这是一个更简单的、更有效率、责权利一致的办法。
遗憾地是目前DNS的架构并不能保证它的安全逻辑没有问题。要想解决DNS架构和部署的安全问题还有很长的一段路要走。但是我们已经可以看到曙光了。
就像俗世的规则一样,在数字证书的世界里,责权不一致的原始设计,也会面临各种各样的问题;而解决的办法,也许是回归到更简单的、责权一致的路上来。