pyOpenSSL set_cipher_list对流量没有影响

时间:2013-08-19 12:06:43

标签: python openssl pyopenssl mitmproxy

更新:似乎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的一部分。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

显然,在客户端指定服务器名称的情况下,为上下文定义了回调:

ctx.set_tlsext_servername_callback(handle_sni)

该回调定义了一个新的上下文,它显然在握手期间用定义的密码覆盖了上下文。解决方案是将密码定义添加到该回调中。