[瞎想]关于 HTTPS 证书的安全性

2017-02-27 10:15:38 +08:00
 cy18

由于本人对 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 ,你只需要信任他不会做傻事就可以了,因为他没有办法做坏事而不留下证据。

3685 次点击
所在节点    SSL
30 条回复
imlonghao673
2017-02-27 10:19:21 +08:00
我的结论是,申请证书时提交 CSR 申请即可,自己保管好私钥,不要要他们代为生成
cy18
2017-02-27 10:21:12 +08:00
@imlonghao673 对,提交 csr 这种方式才安全,但是有的 CA 没这个选项
coo
2017-02-27 10:22:15 +08:00
私钥应该是自己生成的,你用的那两家流程有问题。
cnbeining
2017-02-27 10:22:52 +08:00
> 申请证书
> 不能自己上传 CSR

您有可能是假 CA 的受害者
msg7086
2017-02-27 10:23:25 +08:00
「里面包括私钥,公钥跟签名文件。」

这本来就是违反常理的行为。私钥是所有者的证明, CA 生成私钥,这张证书拥有者当然是 CA 而不是你,都轮不到你称这张证书是「你的证书」。

另外这也不是「一般 CA 」。我还没怎么见过一般 CA 是自己生成私钥的。
cy18
2017-02-27 10:25:30 +08:00
@cnbeining
@coo 难道是因为免费证书的关系么。一个是很早以前申请过 start SSL ,另外一个是前段时间在腾讯云上申请的免费 https 证书...
jybox
2017-02-27 10:34:27 +08:00
我之前发过一些帖子 https://www.v2ex.com/t/235216
主要的观点是,如果有一家 CA 签发的过程非常简单,那么这个 CA 就是体系中最薄弱的环节(因为在操作系统和浏览器看来,所有已经信任的 CA 签的证书在一般情况下没什么区别)。
AstroProfundis
2017-02-27 10:38:41 +08:00
很多证书代理商会提供免费的在线生成证书工具,给不懂怎么搞的小白用户解决生成私钥的麻烦
但你都能意识到这里流程有安全风险了,就不应该使用在线工具,而是自己在安全的系统环境中生成私钥,只把 CSR 提交上去就行了
所以要么是你说的那两家 CA 太弱乱搞,要么是你自己没找到单独提交 CSR 的入口...
RqPS6rhmP3Nyn3Tm
2017-02-27 10:40:37 +08:00
其实 LE 也有多种签发证书的途径
并不一定需要 CSR
tcdw
2017-02-27 11:05:13 +08:00
@msg7086 我记得沃通的免费 SSL 证书就是这样的。。
而且在景安申请的话。。是只有这一种途径的
并没有找到可以自己提交 CSR 的方法
msg7086
2017-02-27 11:08:40 +08:00
@tcdw 我痛在我眼里根本就不算是一家正常的 CA 。

@cy18 StartSSL 难道不是客户提交 CSR 么?
最多是用浏览器生成证书吧,浏览器生成证书是本地生成的,只有公钥会被发送到网络上。
gpw1987
2017-02-27 11:26:08 +08:00
其实对于 https 我更多的就是看个绿锁。而且一般的 blog 之类的重要性也不高。真正对网络的加密性有很高要求的,估计专门有这方面的团队吧。
cy18
2017-02-27 11:39:57 +08:00
@msg7086 start SSL 是很久以前用的了,估计我记错了

@gpw1987 https 加密登录密码这功能实打实的啊,不然同一个局域网或者假特点什么的很容易就嗅探到了
hjc4869
2017-02-27 11:48:19 +08:00
确实有很多来历不明的免费 https 证书,是提交申请验证之后直接把公钥+私钥用 Email 发给你。
对于这种来历不明的免费证书,除了“不用”之外并没有别的选择……
dallaslu
2017-02-27 11:49:56 +08:00
说说那两家 CA 的名字吧
gamexg
2017-02-27 11:54:22 +08:00
@tcdw 我记得沃通有两个方式,一个是对方替你生成私钥,一个是自己生成私钥。
感觉靠谱的都应该支持自己生成私钥。
rrfeng
2017-02-27 12:13:56 +08:00
HTTPS 的唯一的基石就是 CA 是可信的,其他都是算法保证可信的。

如果 CA 想干坏事,任何形式都避免不了。
kindjeff
2017-02-27 12:18:22 +08:00
腾讯云的免费证书就是这样的!直接就在一个页面上让我下载公钥和私钥,吓得我都不敢从浏览器上下载下来,但是又没有途径直接放到腾讯云服务器上。
cy18
2017-02-27 12:23:15 +08:00
@kindjeff 不安全归不安全,不过服务器都在他手上,他想干嘛还不是没办法...
chromee
2017-02-27 12:36:42 +08:00
startssl 和以前的沃通都是可以选择用自己的 csr 或者系统帮你生成的
腾讯云这样也没办法,毕竟腾讯云不是 ca 就是个代理

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/343424

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX