Python的扭曲:创建的SSLv2方面
我在做一个游戏私人服务器,游戏是很老,并使用不安全的SSLv2协议进行沟通,我可以解密数据包波谷这样的:Python的扭曲:创建的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上下文。 我tryed这一点:
SSLContext = ssl.DefaultOpenSSLContextFactory('Certificates/bfbc2.key', 'Certificates/bfbc2.crt', sslmethod=ssl.SSL.SSLv2_METHOD)
但它给我这个错误:
ValueError: No such protocol
如何获得的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
唯一的例外来自OpenSSL包,pyOpenSSL的一部分。 pyOpenSSL已经放弃了对SSLv2的支持。您可能能够找到仍然支持SSLv2的pyOpenSSL的旧版本(您可能还必须找到较旧版本的旧版pyOpenSSL兼容的Twisted)。
另一种选择是使用单独的工具(如stunnel
)来终止SSLv2。
同样,您可能需要确保您的本地OpenSSL库的构建实际上仍然支持SSLv2。最近的版本很可能在没有此功能的情况下编译(出于显而易见的原因)。
SSLv2(通常甚至是SSLv3)现在通常不受OpenSSL支持(即未编译),因为它不安全。由于Twisted最终使用OpenSSL,所以当您尝试使用SSLv2时,您会得到No such protocol
。
那么,为什么我可以使用SSL,OpenSSL和套接字模块创建SSLv2套接字? –
回溯清楚地表明你不能使用'OpenSSL'。 'ssl'和'socket'模块实际上只是一件事,它们与'OpenSSL'包是分开的。你可以用它们做什么以及你可以用'OpenSSL'做什么,根据它们的实现和接口保证,必然会有所不同。 –
您的pyOpenSSL安装可能使用比'socket' /'ssl'使用的更新版本的OpenSSL。尽管如此,从这里很难说(也就是说,在你的问题中没有足够的信息来做出关于行为不同的明确陈述)。 –