Curl 和 Python SSL 库使用的 SSL 版本存在问题

Curl 和 Python SSL 库使用的 SSL 版本存在问题

总结 我正在尝试访问仅接受 SSLv3 的 URI。如果我尝试使用 curl 或 Python 请求(使用 ssl 模块)访问它,它不起作用(不同的错误)。

一些更长的解释

有一个 API 具有以下 URI:https://api.mercadolibre.com/sites/MLA/search?q=ipod

  1. 如果我尝试使用浏览器访问该 URI,它可以正常工作(Chrome 和 FF)。

  2. 如果我尝试卷曲它:curl -Iv https://api.mercadolibre.com/sites/MLA/search?q=ipod它不起作用。返回的错误是:

    curl: (35) Unknown SSL protocol error in connection to api.mercadolibre.com:443
    
  3. 强制 curl 使用 SSLv3 可以正常工作:

    curl --sslv3 -Iv https://api.mercadolibre.com/sites/MLA/search?q=ipod
    
  4. openssl s_client -connect api.mercadolibre.com:443

    答案是:

    CONNECTED(00000003)
    write:errno=104
    ---
    no peer certificate available
    ---
    No client certificate CA names sent
    ---
    SSL handshake has read 0 bytes and written 305 bytes
    ---
    New, (NONE), Cipher is (NONE)
    Secure Renegotiation IS NOT supported
    Compression: NONE
    Expansion: NONE
    ---
    

浏览器连接正常,而 curl 和 Python 却无法连接,这怎么可能呢?我该如何修复这个问题?这是我的问题吗(还是 API 所有者的问题)?

有关我的系统的信息

  • Ubuntu 14.04
  • OpenSSL 1.0.1f 2014 年 1 月 6 日

答案1

在提出这个问题时,该网站支持仅有的一小部分非常弱的密码套件,与现代用户代理的兼容性很差。因此,大多数浏览器甚至机器人都无法协商连接,更不用说安全连接了。

该网站此后已(大部分)修复;虽然它仍然存在弱密码套件和其他问题,但它至少应该可以正常运行。

相关内容