如何在python中处理带有套接字的https客户端?正在制作代理服务器



我使用python中的套接字创建代理服务器。我知道如何处理http客户端。但是使用https是行不通的。我向客户端发送消息,表示一切正常。然后我尝试将客户端套接字包装为安全套接字。但它不起作用。

我收到消息:

Exception in thread Thread-14:
Traceback (most recent call last):
File "C:Python37libthreading.py", line 926, in _bootstrap_inner
self.run()
File "C:Python37libthreading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "C:/Users/Даниил/Downloads/python/proxy_server/proxy_server.py", line 39, in __handle_client
self.__handle_https(client_sock, client_data, host, port)
File "C:/Users/Даниил/Downloads/python/proxy_server/proxy_server.py", line 62, in __handle_https
server_side=True)
File "C:Python37libssl.py", line 1238, in wrap_socket
suppress_ragged_eofs=suppress_ragged_eofs
File "C:Python37libssl.py", line 423, in wrap_socket
session=session
File "C:Python37libssl.py", line 870, in _create
self.do_handshake()
File "C:Python37libssl.py", line 1139, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:1076)

我有一个通用名称为localhost的证书,我在浏览器中添加了它。即使我用主机的通用名称(例如docs.python.org(创建证书并将其添加到浏览器中,它也不起作用。

这是我处理https请求的代码:

def __handle_https(self, client_sock, data, host, port):
client_sock.sendall(b'HTTP/1.1 200 Connection Establishedrnrn')
sclient = ssl.wrap_socket(client_sock,
certfile='server.crt',
keyfile='server.key',
server_side=True)

HTTP代理应该只在CONNECT请求完成后在客户端和服务器之间转发数据。它不应该在您尝试时处理TLS本身。相反,它应该在不改变的情况下转发数据,以便通过代理在客户端和服务器之间建立端到端TLS连接。

最新更新