关于 SSL 中间人攻击问题

2017-05-06 21:51:18 +08:00
 yxwzaxns

我现在有一个应用用 python ssl 模块来加密服务端客户端之间的数据

当客户端通过 ip 来连接服务器后,首先获取到服务器证书(服务端证书是用的自签名证书),然后使用这个证书来与服务器通信,现在的问题是:

  1. 在客户端获取证书和数据传输过程能被中间人攻击么,如果可以,执行中间人攻击的难度有多大?是在哪个阶段被替换证书的?
  2. 对于进行中间人攻击来说,直接 ip 访问和 https 访问有什么不一样的地方么?

==以上相关证书都为自签名证书==

3701 次点击
所在节点    SSL
6 条回复
billlee
2017-05-06 22:27:31 +08:00
能,只要能控制链路,没有难度。没有区别。
lianz
2017-05-06 22:43:27 +08:00
客户端验证一下服务端证书就行了
yxwzaxns
2017-05-06 22:50:24 +08:00
@lianz 验证证书是要做的,我就是想知道直接通过 ip 访问的话,这个中间人攻击怎么进行的
yxwzaxns
2017-05-06 22:52:03 +08:00
@billlee 能具体说一下为什么没有难度和区别么?或者能给个相关资料链接,十分感谢
ahhui
2017-05-06 23:49:49 +08:00
1. 能。ISP 可以。在请求发起的时候就可以完成劫持。
2. 没有不同的地方。关键问题是你如何鉴定服务器发来的证书合法性。

基于 ip 的劫持太简单了,通讯链路上的任何路由设备都可以。anycast 技术也可以做到。

ISP 会重点劫持自签证书。务必购买 ca 证书。实在买不了,你的客户端需要硬编码自签证书的指纹和 hash,以便在发送数据之前校验证书。
ZeroClover
2017-05-07 06:23:04 +08:00
SSL/TLS 机制本来就是逐层验证证书的签发机构是否为可信根,如果你直接使用了自签,那么除非你在程序内内置证书的指纹,否则验证机制就无法实现了。

某些实在无法使用第三方 CA 证书的环节(比如内网 IP 或者内部地址),建议自建 CA,然后用自建的 CA 来进行二级或者三级证书的签发,然后在客户端把自建 CA 作为可信根,这样验证证书链的方式要方便一些,不需要写死在程序内

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

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

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

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

© 2021 V2EX