更新:do_handshake 似乎正在重置密码列表
<小时/>
诚然,这是一个非常具体的场景,但也许有人会有想法。我试图强制服务器仅接受 RC4-SHA(仅出于调试原因)。我的代码看起来像这样:
ctx.set_cipher_list('RC4-SHA')
self.connection = SSL.Connection(ctx, self.connection)
print self.connection.getpeername(), self.connection.get_cipher_list()
根据打印输出,一切正常,并且确实使用 RC4-SHA 设置了连接。但是,查看 Wireshark,我可以看到服务器回复了另一个套件 (TLS_RSA_WITH_AES_128_CBC_SHA (0x002f))。不用说,客户端提出了TLS_RSA_WITH_RC4_128_SHA (0x0005),所以没有理由不使用它。
我使用的是 Python 2.7、pyOpenSSL 0.13、OpenSSL 1.0.1e。我正在处理的代码是 mitmproxy 的一部分。
有什么想法吗?
显然,如果客户端指定服务器名称,则为上下文定义了一个回调:
ctx.set_tlsext_servername_callback(handle_sni)
该回调定义了一个新的上下文,该上下文显然在握手期间使用定义的密码覆盖了上下文。解决方案是将密码定义添加到该回调中。
我是一名优秀的程序员,十分优秀!