我正在制作一个游戏服务器模拟器,该游戏已经相当老了,并且使用了不安全的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模块(ssl
和OpenSSL
)。
我意识到,从“零”开始进行庞大的项目是一项繁重的工作,而且在某种程度上是不可能的。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。显然,没有该功能的最新版本可能已经被编译(出于明显的原因)。