Как переслать сеанс SSL?

473
peakpeaktan

Предположим, у меня есть две локальные машины A и B, а также есть удаленный сервер C. Первоначально, если я хочу посетить некоторые ресурсы на C, я могу использовать: https://domain_of_C/some_resources

Теперь требуется, чтобы мне сначала пришлось поговорить с компьютером B с помощью:, https://IP_address_of_B/some_resourcesа затем машина B должна быть способна переслать запрос на удаленный сервер C и получить правильный ответ обратно на машину A.

У меня вопрос, как я могу сделать машину B, чтобы она слепо проходила через данные, включая сам сеанс SSL? Я не знаю, возможно ли это вообще.

1

1 ответ на вопрос

1
LawrenceC

Это ситуация обратного прокси-сервера и поддерживается основными веб-серверами, такими как nginx, apache и IIS.

В каждом из них вы можете определить путь, такой как «/ application» - и вместо того, чтобы искать в соответствующем локальном каталоге и доставлять файл или вызывать интерпретатор сценариев, он вместо этого будет общаться с другим веб-сервером. Затем он перешлет обратно полученный ответ.

Если вы укажете HTTPS-сайт, он будет связываться по HTTPS с «внутренним» веб-сервером, как если бы это был веб-браузер. С большинством веб-серверов вы можете контролировать, какие заголовки из запроса «frontend» копируются в запрос бэкэнда, изменять или фильтровать веб-сервер или добавлять дополнительные.

A даже не будет знать, что C существует, и это то, что вы хотите. В идеале C должен быть доступен только для B, и если вы уверены в этом на 100%, вы можете обойтись без HTTPS между B и C для некоторой производительности, если это имеет значение для вашего оборудования и нагрузки (когда вы получаете тысячи запросов на во-вторых, это может иметь значение). Если ваш «бэкэнд» веб-сервер действительно находится на той же машине или виртуальной машине и слушает 127.0.0.1, HTTPS может быть излишним, например.

Nginx хорошо известен своей скоростью и часто используется для кэширования. Комбинация Nginx с путями, перенаправленными обратно на другой веб-сервер, такой как Apache, является распространенной и часто используемой.

Если вы хотите получить подробную информацию и ваши веб-приложения спроектированы для ее поддержки, вы можете указать несколько внутренних серверных веб-серверов для одного пути для балансировки нагрузки или восстановления после сбоя.

Настройка обратного прокси-сервера зависит от конкретного веб-сервера, но его легко можно найти по "обратному прокси-серверу nginx" и т. Д.

Также haproxy. Обратите внимание, что это проходит через HTTP (S) запросы и ответы, возможно, с модификацией, но не «сеанс SSL» в соответствии с запросом: A видит сертификат B, а не C (хотя вы могли бы сделать их одинаковыми), а если вы используете клиентские сертификаты, B видит A является свидетельством и доказательством, но C не делает; в лучшем случае он видит сертификаты, добавленные в заголовок запроса с помощью B, и должен доверять B. OTOH nginx и haproxy также поддерживают пересылку на уровне TCP («stream» и «mode tcp», см. много Q в различных стеках), как и различные версии netcat и socat. Также ssh tunnel и stunnel, но те излишне перекодируются. dave_thompson_085 5 лет назад 0