V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
工单节点使用指南
• 请用平和的语言准确描述你所遇到的问题
• 厂商的技术支持和你一样也是有喜怒哀乐的普通人类,尊重是相互的
• 如果是关于 V2EX 本身的问题反馈,请使用 反馈 节点
3dwelcome
V2EX  ›  全球工单系统

api.weixin.qq.com 有个比较严重的问题,客户端指定了若干可选密码套件,最终由服务器来决定用什么加密算法。可是微信 SSL 大概率是自己实现的,主动选择了一个并不支持的算法,然后直接返回握手失败!

  •  
  •   3dwelcome · 2018-05-29 16:38:32 +08:00 · 3268 次点击
    这是一个创建于 2363 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如客户端默认有 ECC 椭圆加密算法,ECDHE-ECDSA-AES256-SHA 或者 ECDHE-ECDSA-AES128-GCM-SHA256,和别的算法放在一起,组成一个可选加密套件列表,加到 ClientHello 里,发到微信服务器。

    照常理,微信服务器并不应该自己选择一个不支持的算法,应该退一步,选择一个已经支持的算法,然后就可以握手成功。然而,他把不支持的 ECC 作为首选,结果自然是握手失败。

    复现方法,以证明微信 API 服务器并不支持椭圆算法:

    openssl s_client -connect api.weixin.qq.com:443 -cipher ECDHE-ECDSA-AES256-SHA


    openssl s_client -connect api.weixin.qq.com:443 -cipher ECDHE-ECDSA-AES128-GCM-SHA256


    实际场景中,很多算法比如 RSA,微信都是支持的,可是人家服务器很骄傲,偏偏就不愿意选老算法,非要选最新算法,于是握手 100 次,失败 100 次,进入死循环节奏。

    最终是在客户端把 ECC 套件去掉了,顺利用 RSA 握手传输数据,但总觉得这是微信官方代码的锅。

    6 条回复    2018-05-29 16:59:14 +08:00
    rrfeng
        1
    rrfeng  
       2018-05-29 16:46:13 +08:00 via Android
    现在为了安全一般都是 prefer server side cipher suite 并且直接禁用有危险的旧算法。

    这个没毛病,除非 server 只支持有问题的旧算法。
    3dwelcome
        2
    3dwelcome  
    OP
       2018-05-29 16:55:32 +08:00
    @rrfeng 问题是密码套件列表里有一大堆并不算旧的算法,服务器从里面选一个自己支持的,也比直接返回握手失败来的好。

    我现在是用 RSA(TLS_DHE_RSA_WITH_AES_128_GCM_SHA256)连接的,用着没啥问题。但是如果在 ClientHello 里,把 RSA 和 ECC 同时都塞进去,服务器就会直接返回握手失败,并主动断开连接,也是非常的郁闷。

    你不支持 ECC,那就在备选库里,挑选一个支持的加密算法多好,反正最终都是服务器来决定的。但强行断开,也未免太霸道了点。
    wr410
        3
    wr410  
       2018-05-29 16:56:11 +08:00
    这种前端 SSL 接入基本上是硬件接入,也许人家的接入设备就不支持 ECC 算法 SSL 嘛。
    est
        4
    est  
       2018-05-29 16:57:51 +08:00   ❤️ 1
    我能说我就是用这个特性做反爬的么。。。一大堆换 ip 改 http 头的的爬虫都不知道自己怎么死的。23333
    rrfeng
        5
    rrfeng  
       2018-05-29 16:59:03 +08:00 via Android
    @est
    机智...
    3dwelcome
        6
    3dwelcome  
    OP
       2018-05-29 16:59:14 +08:00
    @est 高手啊,还有这操作,学到了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1995 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:43 · PVG 08:43 · LAX 16:43 · JFK 19:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.