代码之家  ›  专栏  ›  技术社区  ›  Michal Charemza

不加密的sslcontext

  •  0
  • Michal Charemza  · 技术社区  · 6 年前

    有可能是构造一个 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 回复  |  直到 6 年前
        1
  •  0
  •   Michal Charemza    6 年前

    您可以创建一个虚拟的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()
    ...