我正在制作一个游戏服务器模拟器,该游戏已经相当老了,并且使用了不安全的SSLv2协议进行通讯,我可以通过以下方式解密数据包:

ssl_sock = ssl.wrap_socket(sock, keyfile="Certificates/bfbc2.key", certfile="Certificates/bfbc2.crt", ssl_version=SSL.SSLv2_METHOD, do_handshake_on_connect=True, ciphers="DEFAULT")

如您所见,我使用了两个ssl模块(sslOpenSSL)。
我意识到,从“零”开始进行庞大的项目是一项繁重的工作,而且在某种程度上是不可能的。

Twisted可以比socket模块做的更好,所以我决定切换它。

这是问题,我不知道如何创建SSLv2上下文。
我尝试了这个:

SSLContext = ssl.DefaultOpenSSLContextFactory('Certificates/bfbc2.key', 'Certificates/bfbc2.crt', sslmethod=ssl.SSL.SSLv2_METHOD)

但这给了我这个错误:

ValueError: No such protocol


如何在Twisted中使用SSLv2?

最佳答案

看一下回溯:

File "python2.7/site-packages/twisted/internet/ssl.py", line 113, in cacheContext ctx = self._contextFactory(self.sslmethod) File "python2.7/site-packages/OpenSSL/SSL.py", line 600, in __init__ raise ValueError("No such protocol")ValueError: No such protocol

异常来自pyOpenSSL的一部分OpenSSL包。 pyOpenSSL放弃了对SSLv2的支持。您可能可以找到仍支持SSLv2的pyOpenSSL的较旧版本(您可能还必须找到与pyOpenSSL较旧版本兼容的Twisted较旧版本)。

另一种选择是使用单独的工具(例如stunnel)终止SSLv2。

同样,您可能需要确保本机OpenSSL库的构建实际上仍支持SSLv2。显然,没有该功能的最新版本可能已经被编译(出于明显的原因)。

10-08 06:58