1

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

有任何想法吗?

4

1 回答 1

1

显然,如果客户端指定服务器名称,则为上下文定义了一个回调:

ctx.set_tlsext_servername_callback(handle_sni)

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

于 2013-08-20T15:25:05.737 回答