я в настоящее время программирование прокси-сервер с помощью HTTPLIB, и когда я пытаюсь подключиться к HTTPS веб-сайтов (например, Facebook и Google) мой клиент посылает мне «CONNECT» запросы, которые выглядят следующим образом:Как я могу ответить на запрос метода CONNECT на прокси-сервере, используя сокет в python?
CONNECT www.google.co.il:443 HTTP/1.1\r\n
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0\r\n
Proxy-Connection: keep-alive\r\n
Connection: keep-alive\r\n
Host: www.google.co.il:443\r\n
\r\n
I взял рабочий прокси из интернета и поставить его, затем понюхал сеть на Wireshark, и ответ на этот запрос должен выглядеть так:
HTTP/1.1 200 Connection established\n
Proxy-agent: Python Proxy/0.1.0 Draft 1\n
\n
Я заметил, что клиент посылает запрос на сам прокси-сервер, поэтому я решил использовать сокет и отправить ответ клиенту таким образом:
if getmethod(clientreq) is "CONNECT":
text="HTTP/1.1 200 Connection established\nProxy-Agent: THE BB Proxy\n\n"
client.send(text)
Я очень надеялся, что обработка этих «CONNECT» запросы будет решением, и что мой сервер будет, наконец, заботиться о запросах HTTPS, но это не делает, и ответные пакеты, которые я посылаю к клиенту дона» t даже появляются на проводах.
Итак, мои вопросы: 1. Что действительно делает метод «CONNECT»? 2. Что еще мне нужно, кроме обработки запросов метода «CONNECT» для связи с серверами HTTPS?
Для правильного использования CONNECT см. [RFC2817] (https://www.ietf.org/rfc/rfc2817.txt) –
Для версии tl; dr 'CONNECT' по существу устанавливает туннель между клиентом и источником сервер. Вам необходимо будет использовать мультиплексирование ввода-вывода (например, используя модуль 'select' или что-то вроде Twisted), чтобы реализовать это правильно. –
Я сделал то же самое и обнаружил, что квитирование SSL действительно пыталось; но в моем случае рукопожатие прекратилось на полпути после приветствия клиента, приветствия сервера и сертификата сервера (обмен ключа сервера) ... клиенту был отправлен запрос на изменение ключа клиента и шифрования SQL, но удивительно, что он не дошел до прокси-сервера или прокси-сервера это сообщение. и я застрял там. Если бы вы продвинулись дальше и внедрили прокси-сервер HTTPS, не могли бы вы поделиться своим опытом о том, как вы преодолели проблему, о которой упоминалось в сообщении? спасибо, Samba – Saasira