- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用需要使用客户端证书的请求
连接到网站。
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]
。 点卡住
:
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 连接开始后,我的机器发送一个客户端问候。
Content Type: Handshake (22)
Version: TLS 1.0 (0x0301)
Length: 512
那么那个数据包的握手协议(protocol)段就是
Handshake Type: Client Hello (1)
Length: 508
Version: TLS 1.2 (0x0301)
后跟受支持的密码套件列表等。我查看了我的客户端发送的密码套件列表,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
已列出。服务器确认此消息,然后发送警报数据包。
最佳答案
我通过从 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'
帮我解决了这个问题。
关于Python 请求获取 TLSV1_ALERT_INTERNAL_ERROR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32910093/
Azure 顾问建议:您的 Azure Database for MySQL - 灵活服务器容易因使用较弱、已弃用的 TLSv1 或 TLSv1.1 协议(protocol)而受到攻击 我已在 MyS
我是一名优秀的程序员,十分优秀!