Я реализовал собственный прокси-сервер для маршрутизации моего сетевого трафика. У меня два или более браузеров, и я установил расширение для каждого браузера. Расширение браузера добавит два разных заголовка HTTP для всех запросов HTTP.
Витрина: -
----------Browser1 Request-------------
| // GET https://google.com/ HTTP 1.1 |
| // Browser: 1 |-----------|
| // ... | |
-------------------------------------- | |-------|
|---------------------->| |===> VPN1
| Proxy |
|---------------------->| |===> VPN2
----------Browser2 Request------------- | |-------|
| // GET https://google.com/ HTTP 1.1 | |
| // Browser: 2 |-----------|
| // ... |
--------------------------------------
Когда я использую URL-адрес http, я могу прочитать значение заголовка: -
GET http://google.com/ HTTP/1.1\r\nHost: google.com\r\nUser-Agent: curl/7.66.0\r\nAccept: */*\r\nProxy-Connection: Keep-Alive\r\nBrowser:1\r\n\r\n
Но когда я использую URL-адрес https, я не могу прочитать значение заголовка: -
\x16\x03\x01\x02\0\x01\0\x01\xfc\x03\...
Заранее благодарим за любое решение или любое альтернативное решение для его достижения.
Заголовки HTTP являются частью фактической полезной нагрузки запроса, поэтому, когда HTTP выполняется через TLS (https), полезная нагрузка шифруется.
Если вы хотите перехватывать https-трафик, вам необходимо установить собственный сертификат на прокси-сервер и систему браузера. Таким образом, прокси может действовать как посредник, видя весь зашифрованный трафик между браузером и сервером.
Непонятно, что именно делает ваше расширение для браузера и чего именно вы пытаетесь достичь. Но если вы хотите различать браузер на прокси-сервере, то это не сработает для HTTPS, если вы добавите заголовок в окончательный HTTP-запрос, потому что он будет зашифрован с помощью TLS. Это именно то, что вы видите, т.е. \x16\x03\x01...
это начало рукопожатия TLS.
Лучшим подходом было бы использование прокси-аутентификации. В этом случае каждый пользователь (и, следовательно, браузер) должен пройти аутентификацию через прокси. Необходимая информация отправляется внутри Прокси-аутентификация заголовок - как для простого HTTP-запроса, так и для запроса CONNECT, который запрашивает туннель через прокси для HTTPS.
Преимущество использования прокси-аутентификации также заключается в том, что это фактически аутентификация клиента, которую вы хотите, это стандартный способ аутентификации клиента на прокси-сервере, он хорошо поддерживается в браузерах, но также и в клиентах командной строки, и он не требует любые специальные расширения браузера.