SSLContext, который не шифрует - PullRequest
0 голосов
/ 17 декабря 2018

Возможно ли создать SSLContext , который выполняет шифрование * через базовый сокет и просто передает данные напрямую, поэтому удаленному серверу не требуется SSL / TLSзнаете ли вы каким-либо образом?

Это может показаться немного бессмысленным, но я исследую, как пути кода могут быть максимально похожими между зашифрованными и незашифрованными соединениями, например, если может иметь что-то вроде

encrypted_opts = ...
non_encrypted_opts = ...
context = SSLContext(**(encrypted_opts if encrypt else non_encrypted_opts))
ssl_socket = context.wrap_socket(socket, ...)

1 Ответ

0 голосов
/ 01 января 2019

Вы можете создать фиктивный SSLContext, который возвращает сокет, который выглядит как SSLSocket

from socket import socket

class NonSSLContext():
    def wrap_socket(self, sock, *_, **__):
        sock.__class__ = NonSSLSocket
        return sock

class NonSSLSocket(socket):
    __slots__ = ()

    def do_handshake(self):
        pass

    def unwrap(self):
        self.__class__ = socket
        return self

, который можно использовать как (например)

from ssl import SSLContext

encrypted_context = SSLContext(...
non_encrypted_context = NonSSLContext(...
context = encrypted_context if encrypt else non_encrypted_context
socket = ...
ssl_socket = context.wrap_socket(sock, ...
...
ssl_sock.do_handshake()
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...