Я очень смущен тем, как работает прокси-сервер SSL http, и хотел бы узнать подробности. допустим, у меня есть домен https://myproxy.com, и я хочу подключиться к https://awebsite.com. Я настраиваю свой chrome или firefox с прокси / именем пользователя / паролем. Затем я go на сайт https://awebsite.com.
- Я предполагаю, что chrome подключается к https://myproxy.com
- Затем я предполагаю, что существует обмен сертификатами с использованием сертификатов myproxy? Это правильно?
- После этого, я «думаю», отправлено HTTP-сообщение подключения (все это описано в материалах http-прокси)
- Затем, поскольку подключение было отправлено, прокси-сервер подключается на сайт awebsite.com для проверки сертификата
- Затем chrome отправляет запрос на веб-сайт на прокси-сервер в зашифрованном виде
- Прокси-сервер расшифровывает, повторно шифрует и отправляет на сайт awebsite.com
- Затем все происходит в обратном порядке
это правильно?
и, в частности, я вижу, что chrome запускается так же
ChromeOptions options = new ChromeOptions().addArguments("--proxy-server=http://proxy:3128");
и как-то он делает https в порт http? или это?
Когда я использую http://localhost: 8080 для прокси, он явно отправляет сообщения CONNECT в порт http :( не на безопасный порт. Когда я устанавливаю его на https://localhost: 8443 , я не уверен, что происходит. Я не получаю сообщение CONNECT, но это, скорее всего, неудачное рукопожатие.
EDIT: больше информации по мере изучения Я curl на https, например, предоставляя ему прокси
curl -verbose --proxy localhost:3128 https://www.caredash.com
Я вижу, что на мой сервер приходит сообщение CONNECT, и я отправляю OK, а затем curl записывает это
* Proxy replied 200 to CONNECT request
* CONNECT phase completed!
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/cert.pem
CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* CONNECT phase completed!
* CONNECT phase completed!
Я беру дальнейшее предположение здесь, но это фаза обмена сертификатами через порт, который изначально был в виде обычного текста, поэтому сокет теперь переходит с обычного текста на SSL с использованием сертификата прокси-домена «Я думаю»?
Зачем отправлять так много информации в виде обычного текста на прокси-сервер? Должен ли CONNECT быть только CONNECT *, чтобы люди не могли видеть, на какие веб-сайты кто-то собирается? Теперь мне кажется странным, что я прохожу через это, пытаясь выяснить безопасность здесь.
ДАЛЬШЕ , Подозреваю, что завиваюсь ли я n https://proxy: порт , затем он подключится к прокси-серверу с помощью https THEN, он отправит сообщение CONNECT через https, а затем туннелирует рукопожатие SSL веб-сайта в SSL на прокси. Это правильно? (Думаю, скоро я буду тестировать и это).
спасибо, Дин