WedX - журнал о программировании и компьютерных науках

Ограничение небезопасных подключений по протоколу веб-сокетов в PCF

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

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


Ответы:


1

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

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

  1. Вам не нужно настраивать сертификаты или что-то подобное при развертывании вашего приложения в PCF. Платформа позаботится обо всем этом. В вашем случае это, скорее всего, будет обрабатываться HAProxy, но это может быть какой-то другой балансировщик нагрузки или даже Gorouter, в зависимости от того, какая рабочая группа вашей платформы установила PCF. Конечным результатом является то, что 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. в Chrome.

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

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

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

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

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

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

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

23.01.2020
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]