簡體   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