【问题标题】:Python requests gets TLSV1_ALERT_INTERNAL_ERRORPython 请求获取 TLSV1_ALERT_INTERNAL_ERROR
【发布时间】:2015-10-02 14:58:52
【问题描述】:

我正在尝试使用requests 连接到需要使用客户端证书的网站。

import requests
r = requests.get(url, cert='path to cert')
print(r.status_code)

这适用于使用相同客户端证书的一个站点。该服务器正在使用TLS_RSA_WITH_AES_128_CBC_SHA, TLS 1.0。但是我的目标站点使用TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS 1.1。所以基本上区别在于 TLS 1 有效,而 TLS 1.1 无效。在浏览器中一切正常,因此它必须与 Python 的 SSL 有关。

我使用的是requests 2.7.0 版,并且我也安装了requests[security]pip freeze:

cffi==0.9.2
cryptography==0.8.1
ndg-httpsclient==0.3.3
pyasn1==0.1.7
pycparser==2.10
pyOpenSSL==0.15.1
requests==2.7.0
six==1.9.0

我得到的具体错误是requests.exceptions.SSLError: [SSL: TLSV1_ALERT_INTERNAL_ERROR] tlsv1 alert internal error (_ssl.c:600)。这是在带有 Python 3.4.3 的 Windows 7 上。不幸的是,这是在一台内部机器上,所以我被 Windows 困住了,我们的 PyPi 内部镜像没有所有内容的最新版本。在我看来,这似乎与 ssl 失败有关,但不一定是 requests

Google 不会回馈有希望的结果。 this StackOverflow 帖子描述了同样的问题,但提供的解决方案(使用自定义适配器)对我不起作用。

希望其他人之前遇到过这个问题,可以给我一些关于如何解决它的提示。请和谢谢。

编辑:我对交互进行了wireshark 捕获。发回的 SSL 警报是“级别:致命 (2) 描述:内部错误 (80)”。 TCP连接开始后,我的机器发送一个客户端hello。

Content Type: Handshake (22)
Version: TLS 1.0 (0x0301)
Length: 512

那么那个包的握手协议段就是

Handshake Type: Client Hello (1)
Length: 508
Version: TLS 1.2 (0x0301)

后面是支持的密码套件列表等。我查看了我的客户发送的密码套件列表,并列出了TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA。服务器确认此消息,然后发送警报数据包。

【问题讨论】:

  • 你能用 Wireshark 捕获网络流量的踪迹吗?在发送警报之前的握手过程中 SSL 协商的所有参数是什么?
  • 我现在将编辑结果
  • @AdamRosenfield 发布

标签: python python-3.x ssl python-requests


【解决方案1】:

通过从requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS 中删除第一个条目ECDH+AESGCM,我摆脱了相同的SSLError,服务器似乎有问题。线

requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+HIGH:RSA+3DES:!aNULL:!eNULL:!MD5'

为我解决了问题。

【讨论】:

    【解决方案2】:

    对我来说,request.request('GET'... 而不是 request.get(... 有效。

    【讨论】:

      【解决方案3】:

      我通过删除几乎所有的第一个条目来摆脱上述 SSLError:

      requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'RSA+AESGCM:RSA+AES:RSA+HIGH:RSA+3DES:!aNULL:!eNULL:!MD5'

      【讨论】:

        猜你喜欢
        • 2015-04-24
        • 2014-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-04
        • 2017-05-08
        • 1970-01-01
        相关资源
        最近更新 更多