繁体   English   中英

如何在 python 中使用 sockets 处理 https 客户端? 制作代理服务器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM