用户无法与代理通信

User can't communicate with proxy

我正在实施一个与 client.However 安全通信的 IMAP 代理,我在握手时遇到问题。

我的代理代码是:

self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.bind((host, port))
ssock, addr = self.sock.accept()

context = ssl.SSLContext(ssl.PROTOCOL_TLS)
self.conn_client = context.wrap_socket(ssock)

我收到错误:

ssl.SSLError: [SSL: UNEXPECTED_MESSAGE] unexpected message (_ssl.c:833)

我的测试代码是:

M = imaplib.IMAP4_SSL(IP_PROXY)

我收到错误:

ssl.SSLError: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:777)

但是,当代理的代码为:

self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.bind((host, port))
ssock, addr = self.sock.accept()
self.conn_client = ssl.wrap_socket(ssock, certfile=CERT, server_side= True) 

它可以正常工作,但我不想使用证书。

谢谢

It correctly works but I don't want to use certificate.

SSL/TLS 几乎在任何地方都与证书一起使用,以确保客户端正在与预期的服务器对话,而不是与中间人对话。如果您不想使用证书,则需要使用不同类型的身份验证(如 PSK)或根本不使用身份验证("anonymous authentication" - 非常糟糕的主意)。

您需要以任何方式设置相关密码以在客户端和服务器上启用此替代身份验证。这可以在服务器端使用 wrap_socketciphers 属性来完成,在您的客户端代码中,它可能通过构造一个具有必要密码的 SSLContext 并使用 ssl_context 参数来完成具体要在 IMAP4_SSL.

中使用的上下文

但这仅适用于您特定的基于 Python 的 IMAP 客户端。不要指望您能够将常用的 IMAP 客户端(如 Thunderbird 或 Outlook)配置为可在没有证书的服务器上使用。就像我说的,这首先是个坏主意。