用户无法与代理通信

时间:2018-04-30 14:19:48

标签: python sockets ssl imaplib

我正在实施一个安全地与客户端通信的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) 

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

谢谢

1 个答案:

答案 0 :(得分:1)

  

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

SSL / TLS几乎随处可用于证书,以确保客户端与预期的服务器通信,而不是与中间的某个人通信。如果您不想使用证书,则需要使用不同类型的身份验证(如PSK)或根本不使用身份验证(“匿名身份验证” - 非常糟糕的主意)。

无论如何,您都需要设置相关密码以在客户端和服务器上启用此备用身份验证。这可以通过服务器端的ciphers属性wrap_socket完成,在客户端代码中可以通过构造带有必要密码的SSLContext并使用ssl_context参数来完成特定于IMAP4_SSL中使用的上下文。

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