Ограничить небезопасные соединения по протоколу веб-сокетов в PCF - PullRequest
0 голосов
/ 22 января 2020

Мы размещаем приложение в среде preprod azure PCF, которая предоставляет конечные точки веб-сокета для подключения клиентских устройств. Существует ли предписанная методология для защиты указанной конечной точки веб-сокета с использованием TLS / SSL, когда она размещена на PCF и работает за PCF HAProxy?

У меня проблемы с интерпретацией этой информации, например, мы должны выставить порт 4443 на сервере и PCF должен по умолчанию выбрать его как безопасный порт, который гарантирует, что незащищенные соединения не могут быть установлены? Или для HAProxy требуется некоторая настройка?

1 Ответ

0 голосов
/ 23 января 2020

Существует ли предписанная методология для защиты указанной конечной точки веб-сокета с использованием TLS / SSL, когда она размещена на PCF и работает за PCF HAProxy?

Несколько вещей:

  1. Вам не нужно настраивать сертификаты или что-то подобное при развертывании приложения на PCF. Платформа заботится обо всем этом. В вашем случае это, вероятно, будет обрабатываться HAProxy, но это может быть какой-то другой балансировщик нагрузки или даже Gorouter в зависимости от установленной PCF операционной команды вашей платформы. В результате net TLS сначала завершается до того, как он попадает в ваше приложение, поэтому вам не нужно об этом беспокоиться.

  2. Ваше приложение всегда должно заставлять пользователей использовать HTTPS. То, как вы это сделаете, зависит от языка / структуры, которые вы используете, но большинство из них имеют некоторые функции для этого.

    Этот процесс обычно работает, проверяя, был ли входящий запрос по HTTP или HTTPS. Если это HTTP, вы перенаправляете на тот же URL, но через HTTPS. Это важно для всех приложений, а не только для тех, которые используют WebSockets. Зашифруйте все вещи.

    Имейте в виду, что вы находитесь за одним или несколькими обратными прокси, поэтому, если вы делаете это вручную, вам нужно будет рассмотреть, что находится в x-forwarded-proto или x-forwarded-port, а не только восходящее соединение, которое будет Gorouter, а не браузером вашего клиента.

    https://docs.pivotal.io/platform/application-service/2-7/concepts/http-routing.html#http -headers

  3. Если вы заставляете своего пользователя HTTPS (№ 1 выше), тогда ваши пользователи не смогут инициировать небезопасное соединение WebSocket с вашим приложением. Браузеры, такие как Chrome & Firefox, имеют ограничения для предотвращения установки небезопасного соединения WebSocket при загрузке сайта по HTTPS.

    Вы получите сообщение типа The operation is insecure в Firefox или Cannot connect: SecurityError: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS. in Chrome.

У меня проблемы с интерпретацией этой информации, так как мы должны выставить порт 4443 на сервере, и PCF по умолчанию выберет его быть безопасным портом, который гарантирует, что незащищенные соединения не могут быть установлены? Или же для HAProxy требуется какая-то настройка?

С точки зрения приложения, вы не делаете ничего другого. Ваше приложение должно запускаться и прослушивать назначенный порт, то есть то, что находится в $PORT. Это то же самое для HTTP, HTTP, WS и WSS traffi c. Короче говоря, как разработчику приложения вам не нужно думать об этом при развертывании на PCF.

Единственное исключение будет, если ваша операционная группа платформы использует балансировщик нагрузки, который изначально не поддерживает WebSockets. В этом случае, чтобы обойти проблему, они должны отделить трафик c. HTTP и HTTPS go на традиционных портах 80 и 443, и они будут маршрутизировать WebSockets на другой порт. Документы PCF рекомендуют 4443, где вы, вероятно, видите этот порт. Я не могу сказать вам, настроена ли ваша платформа таким образом, но если вы знаете, что используете HAproxy, вероятно, это не так.

https://docs.pivotal.io/platform/application-service/2-8/adminguide/supporting-websockets.html

Во всяком случае, если вы просто не знаете, просто pu sh приложение и попытайтесь инициировать безопасное соединение WebSocket через порт 443 и посмотрим, работает ли это. Если это не удается, попробуйте 4443 и посмотрите, работает ли это. Об этом или спросите вашу операционную группу по платформе.

Сколько стоит, даже если вам нужно использовать порт 4443, нет разницы в вашем приложении, работающем на PCF. Единственная разница будет в вашем Javascript коде, который инициирует соединение WebSocket. Нужно знать, чтобы использовать порт 4443 вместо стандартного 443.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...