我正在制作一个游戏服务器仿真器,游戏很老,使用不安全的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
如何让SSLv2在Twisted中工作?在
看看回溯:
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
异常来自OpenSSL包,它是pyOpenSSL的一部分。pyOpenSSL已放弃对SSLv2的支持。您可能可以找到仍然支持SSLv2的旧版本的pyOpenSSL(您可能还需要找到与旧pyOpenSSL兼容的Twisted的旧版本)。在
另一个选择是使用单独的工具(如
stunnel
)终止SSLv2。在类似地,您可能需要确保本机OpenSSL库的构建实际上仍然支持SSLv2。最近的版本很可能没有这个特性(原因很明显)。在
目前,OpenSSL通常不支持SSLv2(通常甚至SSLv3),因为它不安全。由于Twisted最终使用OpenSSL,所以在尝试使用SSLv2时会得到
No such protocol
。在相关问题 更多 >
编程相关推荐