2017-08-12 8 views
0

Je fais un émulateur de serveur de jeu, le jeu est assez vieux et utilise le protocole SSLv2 non sécurisé pour communiquer, je peux déchiffrer auge paquet ceci:Python Twisted: Créer SSLv2 contexte

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")

Comme vous pouvez vois que j'ai utilisé deux modules SSL (ssl et OpenSSL). Je me suis rendu compte que faire de cet énorme projet de «zéro», c'est trop de travail, et c'est impossible d'une manière ou d'une autre. Peut faire mieux que le module socket, donc j'ai décidé de le changer.

Et est le problème ici, je ne sais pas comment créer le contexte SSLv2. I tryed ceci:

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

Mais il me donne cette erreur:

ValueError: No such protocol 

Comment obtenir SSLv2 travaillant dans Twisted?

Répondre

0

Regardez le retraçage:

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

L'exception vient de l'OpenSSL, une partie de pyOpenSSL. pyOpenSSL a abandonné la prise en charge de SSLv2. Vous pourrez peut-être trouver une ancienne version de pyOpenSSL qui supporte encore SSLv2 (vous devrez peut-être aussi trouver une ancienne version de Twisted avec laquelle l'ancien pyOpenSSL est compatible).

Une autre option serait de mettre fin à SSLv2 avec un outil séparé tel que stunnel.

De même, vous devez vous assurer que votre construction de la bibliothèque OpenSSL native soutient en fait encore SSLv2. Les versions récentes ont probablement été compilées sans cette fonctionnalité (pour des raisons évidentes).

+0

Alors, pourquoi je peux créer le socket SSLv2 en utilisant ssl, OpenSSL et modules de prise? –

+0

La traceback indique clairement que vous ne pouvez pas avec 'OpenSSL'. Les modules 'ssl' et' socket' ne sont en fait qu'une chose et sont séparés du paquet 'OpenSSL'. Ce que vous pouvez faire avec eux et ce que vous pouvez faire avec 'OpenSSL' sera nécessairement différent en fonction de leurs implémentations et de leurs garanties d'interface. –

+0

Votre installation pyOpenSSL utilise peut-être une version plus récente d'OpenSSL que 'socket' /' ssl'. C'est assez difficile à dire d'ici, cependant (c'est-à-dire, il n'y a pas assez d'informations dans votre question pour faire une déclaration définitive sur la raison pour laquelle les comportements diffèrent). –

0

SSLv2 (et souvent même SSLv3) est généralement aujourd'hui non pris en charge par OpenSSL (à savoir pas compilé) car il est peu sûr. Puisque Twisted utilise finalement OpenSSL, vous obtenez No such protocol lorsque vous essayez d'utiliser SSLv2.