是否有可能构造一个不对底层套接字进行加密并直接传递数据的SSLContext,因此远程服务器不需要以任何方式知道SSL/TLS?
这似乎有点毫无意义,但我正在研究如何在加密连接和非加密连接之间保持尽可能相似的代码路径,例如,如果可以有类似的
encrypted_opts = ...
non_encrypted_opts = ...
context = SSLContext(**(encrypted_opts if encrypt else non_encrypted_opts))
ssl_socket = context.wrap_socket(socket, ...)
发布于 2019-01-01 10:33:52
您可以创建一个虚拟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()
...
https://stackoverflow.com/questions/53817486
复制相似问题