Pal*_*Pal 5 python ssl python-requests
是否可以使用 Python requests 模块查看与服务器协商的 TLS 版本?类似于openssl s_client -connect返回的内容
---
未发送客户端证书 CA 名称
---
SSL握手已读取3043字节并写入375字节
---
新功能,TLSv1/SSLv3,密码为 ECDHE-RSA-AES256-SHA
服务器公钥是2048位
支持安全重新协商
压缩:无
扩展:无
SSL 会话:
协议:TLSv1.1
密码:ECDHE-RSA-AES256-SHA
关键参数:无
PSK 身份:无
PSK 身份提示:无
SRP 用户名: 无
复制我在/sf/answers/3882341571/的其他答案的核心,如果你只想做一次事情并进行测试,猴子修补就足够了(否则请阅读我的答案的其余部分,其中提供了使用传输适配器的正确实现,以及收到的证书的正确显示):
import requests
from requests.packages.urllib3.connection import VerifiedHTTPSConnection
SOCK = None
_orig_connect = requests.packages.urllib3.connection.VerifiedHTTPSConnection.connect
def _connect(self):
global SOCK
_orig_connect(self)
SOCK = self.sock
requests.packages.urllib3.connection.VerifiedHTTPSConnection.connect = _connect
requests.get('https://yahoo.com')
tlscon = SOCK.connection
print 'Cipher is %s/%s' % (tlscon.get_cipher_name(), tlscon.get_cipher_version())
print 'Remote certificates: %s' % (tlscon.get_peer_certificate())
print 'Protocol version: %s' % tlscon.get_protocol_version_name()
Run Code Online (Sandbox Code Playgroud)
这产生:
Cipher is ECDHE-RSA-AES128-GCM-SHA256/TLSv1.2
Remote certificates: <OpenSSL.crypto.X509 object at 0x10c60e310>
Protocol version: TLSv1.2
Run Code Online (Sandbox Code Playgroud)