V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yxwzaxns
V2EX  ›  SSL

关于 SSL 中间人攻击问题

  •  
  •   yxwzaxns · 2017-05-06 21:51:18 +08:00 · 3695 次点击
    这是一个创建于 2545 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    某些实在无法使用第三方 CA 证书的环节(比如内网 IP 或者内部地址),建议自建 CA,然后用自建的 CA 来进行二级或者三级证书的签发,然后在客户端把自建 CA 作为可信根,这样验证证书链的方式要方便一些,不需要写死在程序内
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1158 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:42 · PVG 02:42 · LAX 11:42 · JFK 14:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.