我正在制作一个游戏服务器模拟器,游戏很老并且使用不安全的 SSLv2 协议(protocol)进行通信,我可以通过以下方式解密数据包:
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 模块(ssl
和 OpenSSL
)。
我意识到从基本上“零”开始做这个巨大的项目工作量太大,而且在某种程度上是不可能的。
Twisted
可以比 socket
模块做得更好,所以我决定切换它。
问题来了,我不知道如何创建 SSLv2 上下文。 我试过这个:
SSLContext = ssl.DefaultOpenSSLContextFactory('Certificates/bfbc2.key', 'Certificates/bfbc2.crt', sslmethod=ssl.SSL.SSLv2_METHOD)
但它给了我这个错误:
ValueError: No such protocol
如何让 SSLv2 在 Twisted 中工作?
最佳答案
查看回溯:
cacheContext 中的文件“python2.7/site-packages/twisted/internet/ssl.py”,第 113 行
ctx = self._contextFactory(self.sslmethod)
__init__ 中的文件“python2.7/site-packages/OpenSSL/SSL.py”,第 600 行
raise ValueError("没有这样的协议(protocol)")
ValueError:没有这样的协议(protocol)
异常来自 OpenSSL 包,它是 pyOpenSSL 的一部分。 pyOpenSSL 已放弃对 SSLv2 的支持。您也许能够找到仍然支持 SSLv2 的旧版本的 pyOpenSSL(您可能还必须找到与旧的 pyOpenSSL 兼容的旧版本的 Twisted)。
另一种选择是使用单独的工具终止 SSLv2,例如 stunnel
。
同样,您可能需要确保您构建的 native OpenSSL 库实际上仍然支持 SSLv2。最近的版本很可能在没有此功能的情况下编译(出于显而易见的原因)。
关于 python 扭曲 : Create SSLv2 context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45649207/