当前位置: 首页 > 知识库问答 >
问题:

在Python请求中捕获客户机/服务器TLS版本

拓拔阎宝
2023-03-14

是否可以看到使用Python请求模块与服务器协商了哪个TLS版本?类似于openSSL s_client-connect将返回的内容

---
No client certificate CA names sent
---
SSL handshake has read 3043 bytes and written 375 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.1
    Cipher    : ECDHE-RSA-AES256-SHA
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None

共有1个答案

巫马令
2023-03-14

在https://stackoverflow.com/a/55462022/6368697复制我的另一个答案的核心如果您只想做一次测试,一个monkey补丁就足够了(否则请阅读我的答案的其余部分,它提供了一个使用传输适配器的正确实现,以及接收到的证书的正确显示):

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()

这产生了:

Cipher is ECDHE-RSA-AES128-GCM-SHA256/TLSv1.2
Remote certificates: <OpenSSL.crypto.X509 object at 0x10c60e310>
Protocol version: TLSv1.2
 类似资料:
  • 我写了一个小的测试程序来创建 自定义自签名CA证书#1 创建由该CA根证书#1颁发的服务器证书#2 创建具有证书#2的服务器 创建一个RootCA指向证书1的客户端 客户端尝试连接到服务器,但出现错误: 得到“https://localhost:2000:x509:由未知颁发机构签署的证书(可能是因为尝试验证候选颁发机构证书“测试ca”时“x509:Ed25519验证失败”) 我知道这方面的例子有

  • 我已经在Go中编写了一个简单的客户机/服务器,它将通过TLS执行HTTP GET,但我也试图使它能够通过TLS执行HTTP POST。 我现在也没有什么东西可以在服务器端处理这个帖子,但我只想让它把它打印到屏幕上,这样当我运行客户端时,我就会看到服务器打印。 我应该如何修复我的客户端代码来做一个适当的帖子?而相应的服务器代码应该是什么样子才能接受POST呢?任何帮助都将非常感谢,我有困难找到HTT

  • 问题内容: 我有一个node.js应用程序,我想使用它来检查特定站点是否启动并返回正确的响应代码。我希望能够捕获由于域名无法解析或请求超时而出现的任何错误。问题是这些错误导致Node无法处理。我是整个异步编程方法的新手,所以我不确定将try / catch语句放在哪里。 我有一个ajax调用,该调用类似于/ check / site1。服务器端调用一个函数,该函数尝试建立连接,然后返回status

  • 问题内容: 我在跟踪为什么无法连接到特定主机时遇到问题。 通过curl或浏览器,以下命令可以正常工作: 但是,如果我使用请求: 我得到: 在网络上,我仅看到客户端问好,服务器立即断开连接,因此似乎没有任何ssl或密码不兼容。(我希望这些都是SSL层错误)在这种情况下还有什么其他问题? 我在python 3.6.1上,请求2.14.2(带有安全性额外功能)。 问题答案: 该服务器以多种方式损坏。 一

  • 我试图实现一个tcp客户端,它将使用spring Integration连接到现有的服务器。对于这项技术还是新手,我已经在https://github.com/spring-projects/spring-integration-samples上学习了spring示例。 主要方法: 如何强制此客户端连接到我的服务器,即使我不想发送数据?

  • 我正在尝试创建TLS v1。2.服务器和android客户端之间的通信。我建立了TLS v1。0连接有任何问题,但我无法获取v1。2.这是服务器代码: 虽然这是客户端代码: 客户端代码,写在java客户端运行在JRE7在我的PC上,完美的作品,我看到与getProtocol(服务器端)TLSv1.2正确的密码,由tlsv1.2支持。在Android上相同的代码使tlsv1.0连接!我真的不明白。在