由于本人对 SSL 的加密理解是半吊子的,有什么说错了高手帮忙纠正一下。
前段时间用了 Let's encrypt 搞了个证书,发现环节跟其他网站申请证书的环节有点不一样,然后有了现在的瞎想。先说结论:一般的 CA 签发证书的流程不安全,只有 LE ( let's encrypt )这种才安全。
首先现在的 https 安全体系最薄弱的一个环节的就是对 CA 的信任,如果信任列表里面的 CA 乱签发证书,搞中间人攻击,那安全性就无从谈起了。但是作为一个有公信的机构,排除道德不说, CA 最害怕的是作恶被抓住证据,比如之前有一家 CA(忘记名字了)私自签发了 Google 的证书然后被截获了,这对 CA 的公信力而言是有很大的影响的。
现在假设 CA 都符合下面几个条件。第一,他很聪明,不犯任何会被抓到证据的错误,也就是说他不会做傻事。第二,他很坏,想方设法实施中间人攻击,其中包括偷窥数据与篡改数据两个方面,也就是说他想做坏事。
我用过三个免费 HTTPS 证书(没用过收费的的 https ),除了 let's encrypt ,另外两个的签发流程是, 1.注册一个账号,提交我的个人信息。 2.验证域名所有权,可以通过 DNS 记录也可以通过网站上目录放一个特定的东西。 3.CA 签发证书,然后我从 CA 的网站上下载签发好的证书,里面包括私钥,公钥跟签名文件。
而 let's encrypt 的流程是 1.自己生成一对私钥跟公钥。 2.LE 对域名所有权进行验证,主要是通过 HTTP 协议进行一些 challenge 。 3.LE 对公钥进行签名,然后我下载签名文件。
两个流程最大的区别在于第一个流程的私钥是 CA 生成了发给我的,而第二个流程是我自己生成的。
现在问题来了,如果这个 CA 跟 ISP 狼狈为奸的话,他可以在不用签发新证书的情况下对我实现中间人攻击,如果只是窥探数据的话完全不会留下痕迹。如果篡改了数据的话,除非客户端通过其他途径跟服务端校对数据,不然也不会发现问题。
对于第二个流程而言而言,由于只有我自己拥有私钥,除非 LE 签发一个新的证书,不然他无法参与中间人攻击。但是,使用新签发的证书实施中间人攻击是会留下证据的,显然聪明的 CA 不会做出这种事。
对于采用了第一种流程的 CA ,你除了信任他不会做傻事,还得信任他不会做坏事。而对于 LE ,你只需要信任他不会做傻事就可以了,因为他没有办法做坏事而不留下证据。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.