菜鸟提问,关于 https 的中间人攻击问题

2021-01-13 18:56:08 +08:00
 JaaaaackZheng
https 通过 ssl 来保证数据在网络上加密传输,保证数据安全性。
CA 颁发的数字证书可以保证不会被中间人攻击。
那么如果我把 CA 服务器也一起劫持了是不是也能进行中间人攻击。
对网络安全不太懂,大佬轻喷
3161 次点击
所在节点    程序员
33 条回复
zxlzy
2021-01-13 18:58:59 +08:00
是的,证书是 CA 颁发的,如果 CA 被攻击了,签发了假的证书,https 就被破解了。
JaaaaackZheng
2021-01-13 19:04:15 +08:00
@zxlzy 这样啊,我还想问一下。使用 dns 劫持的方式,我把发向 CA 服务器的请求劫持了伪造 CA 服务器,这样感觉加入 CA 也只是增加了中间人攻击的步骤而已。
ericwood067
2021-01-13 19:07:00 +08:00
@JaaaaackZheng 除非你黑了 CA 的服务器,拿到他的私钥,只劫持发给 CA 服务器的请求是没用的。
also24
2021-01-13 19:09:05 +08:00
简单点来说:不存在 『发向 CA 服务器的请求』

大部分 CA 的信息,是直接内置在 操作系统 / 网络库 中的。

你也可以手动信任其它 CA,来协助这些 CA 对你进行中间人(例如抓包的时候)。



另:
严格来说,OCSP 请求属于 『发向 CA 服务器的请求』,OCSP 请求也确实可以被劫持,此处暂不谈。
smileawei
2021-01-13 19:09:25 +08:00
所以 CA 供应商的审计是十分严格的。每年缴纳大量的保证金。还有各种审计。
之前中国大陆的几家 CA 公司都因为不合规被 Google 和 Mozilla 拉黑。
可以自行百度 CNNIC CA 和沃通 CA 的事情。
smileawei
2021-01-13 19:13:58 +08:00
https://www.williamlong.info/archives/4183.html

CNNIC 的这个行为就是你说的 CA 供应商做中间人。这个用户无法察觉,所以仅这一件事。CNNIC 的 CA 就彻底不被浏览器信任了。
Tumblr
2021-01-13 19:16:03 +08:00
@JaaaaackZheng #2 呃。。。怎么说呢,感觉你应该先了解一下黑 CA 服务器的难度有多大……可能比猜中私钥的难度还要大。。。不管是在物理层面(社工)还是技术层面。
首先抛开技术层面,单是物理层面的防护,就超出了相当相当相当大部分人的想象。
JaaaaackZheng
2021-01-13 19:20:35 +08:00
@smileawei 我指的是增加个中间人攻击,伪装成 CA 来响应客户端请求。你好像说的跟我不是一回事
weyou
2021-01-13 19:21:45 +08:00
纯属想多了系列。CA 的证书内置在客户端设备中,验证都是本地验证,并没有什么 CA 服务器来帮助验证,除非你有客户端的控制权,否者单靠中间人是无法攻破 HTTPS 的
JaaaaackZheng
2021-01-13 19:22:12 +08:00
@Tumblr 利用 DNS 劫持 OCSP 请求这样会很难吗,不是黑 CA 服务器喔。
also24
2021-01-13 19:23:42 +08:00
@JaaaaackZheng #8
因为你把证书的验证过程理解错了。

证书的验证过程不是说浏览器拿着证书去服务器问:这个证书我可以信任嘛?

而是操作系统 /浏览器 /网络库,早就内置好了自己信任的 CA 的证书,当需要验证的时候直接在本地进行比对。

这个过程中,是不存在网络请求的,自然也就无从拦截。


再次备注:
为了方便理解,这里暂时不讨论 OCSP 的情况。
also24
2021-01-13 19:24:32 +08:00
@JaaaaackZheng #10
我这里提到 OCSP 是为了防杠 ,你先假装这个东西根本不存在,不要搭理他。
JaaaaackZheng
2021-01-13 19:25:19 +08:00
@weyou
@also24
那如果是最近才注册的证书不是需要 CA 服务器验证吗
carlclone
2021-01-13 19:27:52 +08:00
可以,这就是 fiddler 的原理,但是只能建立新会话,已经建立的连接依旧没办法中间人攻击
weyou
2021-01-13 19:28:13 +08:00
你把 CA 证书和用户证书弄混了,内置的 CA 证书很少会发生改变。用户自己证书是部署在用户自己的服务器上的,在上网过程中并不再存在跟 CA 服务器的通信。
lanternxx
2021-01-13 19:33:11 +08:00
@JaaaaackZheng #13 SSL 证书从来就都不需要 CA 服务器介入验证,任何时候的都不需要。可信任的根证书是预置于客户端本地的。
OCSP 是用来检查证书吊销状态的,它不能使无效的证书变有效。
also24
2021-01-13 19:33:16 +08:00
@JaaaaackZheng #13
所以说你没理解整个证书机制,证书机制自身是不需要联网验证的。

它只需要确认,你拿来验证的这个证书,是由内置的可信任证书签发的就行了。
这个验证过程是基于签名机制的,不需要联网。


附加内容:
但这个机制有个缺陷,就是证书一旦签发,就没有撤回的机会了,因为所有的验证过程都可以离线完成。

因此才出现了前面提到的 OCSP,它需要联网查询吊销列表。
劫持它确实是可行的,但是并不能让一个不受信任的证书变成信任,只能让被吊销的正牌证书暂时不被认出。
CEBBCAT
2021-01-13 19:40:52 +08:00
干脆打回重学证书签发流程吧…… 学而不思则罔 思而不学则殆
JaaaaackZheng
2021-01-13 19:43:30 +08:00
@also24
@lanternxx
@weyou
确实是我没理解好,之前一直认为判断证书是否被篡改需要连接 CA 服务器
JaaaaackZheng
2021-01-13 19:55:46 +08:00
(*Φ皿Φ*)知道错了各位大佬,立刻滚去学习

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

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

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

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

© 2021 V2EX