![](/img/trans.png)
[英]how to maintain connection between several clients and server in a Python Sockets program
[英]How to handle https clients with sockets in python? Making proxy server
我在 python 中使用 sockets 创建代理服务器。 我知道如何处理 http 客户。 但是对于 https 它不起作用。 我向客户发送消息说一切正常。 然后我尝试将客户端套接字包装为安全套接字。 但它不起作用。
我收到消息:
Exception in thread Thread-14:
Traceback (most recent call last):
File "C:\Python37\lib\threading.py", line 926, in _bootstrap_inner
self.run()
File "C:\Python37\lib\threading.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:\Python37\lib\ssl.py", line 1238, in wrap_socket
suppress_ragged_eofs=suppress_ragged_eofs
File "C:\Python37\lib\ssl.py", line 423, in wrap_socket
session=session
File "C:\Python37\lib\ssl.py", line 870, in _create
self.do_handshake()
File "C:\Python37\lib\ssl.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 Established\r\n\r\n')
sclient = ssl.wrap_socket(client_sock,
certfile='server.crt',
keyfile='server.key',
server_side=True)
HTTP 代理应该只在 CONNECT 请求完成后转发客户端和服务器之间的数据。 当您尝试时,它不应该处理 TLS 本身。 相反,它应该原封不动地转发数据,以便客户端与服务器之间通过代理建立端到端的 TLS 连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.