2017-08-12 89 views
0

我在做一個遊戲私人服務器,遊戲是很老,並使用不安全的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模塊(sslOpenSSL)。 我意識到,從基本上'零'做這個巨大的項目是太多的工作,而且它在某種程度上是不可能的。

Twisted可以做的事情比socket模塊更好,所以我決定切換它。

這裏是問題,我不知道如何創建SSLv2上下文。 我tryed這一點:

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

但它給我這個錯誤:

ValueError: No such protocol 

如何獲得的SSLv2在扭曲的工作?

回答

0

看回溯:

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。最近的版本很可能在沒有此功能的情況下編譯(出於顯而易見的原因)。

+0

那麼,爲什麼我可以使用SSL,OpenSSL和套接字模塊創建SSLv2套接字? –

+0

回溯清楚地表明你不能使用'OpenSSL'。 'ssl'和'socket'模塊實際上只是一件事,它們與'OpenSSL'包是分開的。你可以用它們做什麼以及你可以用'OpenSSL'做什麼,根據它們的實現和接口保證,必然會有所不同。 –

+0

您的pyOpenSSL安裝可能使用比'socket' /'ssl'使用的更新版本的OpenSSL。儘管如此,從這裏很難說(也就是說,在你的問題中沒有足夠的信息來做出關於行爲不同的明確陳述)。 –

0

SSLv2(通常甚至是SSLv3)現在通常不受OpenSSL支持(即未編譯),因爲它不安全。由於Twisted最終使用OpenSSL,所以當您嘗試使用SSLv2時,您會得到No such protocol