Навіщо потрібні PUSH messages, наскільки це безпечно, як вони працюють и чи можна без них обійтися?
Що воно таке, оці PUSH-повідомлення?
Це текстові повідомлення спеціального типу, які відправляються на пристрої Android/iOS безпосередньо з серверів Google, Apple чи Huawei. Вони можуть йти відкритим текстом, а можуть бути зашифровані. Сенс таких повідомлень у тому, щоб мати змогу відправити у клієнтський додаток месадж, коли той неактивний. Максимальна довжина такого повідомлення — 4 кілобайти.
Справа в тому, що коли ви в своєму айфоні переключаєтеся на інший додаток, то попередній майже моментально зупиняється. Так, ви бачите його картинку, коли листаєте останні додатки, але по факту це просто картинка.
З Android ситуація дуже близька. Реальної багатозадачності, як у Windows чи Linux, там немає, бо є дуже жорсткі обмеження на витрату енергії акумулятора мобільного пристрою.
Тому, по факту, додаток не працює в реальному часі, якщо він у вас не відкритий на екрані чи коли смартфон взагалі лежить заблокований у кишені. Але, в операційній системі iOS та Android є привілейовані системні служби, які працюють завжди, і одна з них — це служба прийому PUSH-сповіщень, щоб сервер міг надіслати повідомлення клієнту у телефоні, який не може самостійно отримати його, бо знаходиться у “замерзлому” стані.
Свого часу, поява технології PUSH-повідомлень у айфонах дала поштовх швидкому розповсюдженню WhatsApp, згадує Ян Кум, головний розробник цього месенджера.
Звідки смартфон отримує PUSH-повідомлення?
Отримують їх через інтернет, через TCP-протокол. Служби доставки PUSH-сповіщень Google, Apple та Huawei використовують наступні порти:
- Google Firebase Cloud Messaging (FCM) (раніше Google Cloud Messaging – GCM):
- Порт 5228 — основний порт, який використовується для зв’язку з FCM серверами.
- Також можуть використовуватися порти 5229 і 5230, але 5228 є найпоширенішим.
- Apple Push Notification Service (APNS):
- Для зв’язку з APNS використовується порт 443 (HTTPS) або порт 2197.
- Порт 2195 раніше використовувався для підключення до старих версій APNS, але його замінили на HTTPS.
- Huawei Mobile Services (HMS):
Для зв’язку з HMS використовується порт 443 (HTTPS).
Ці порти повинні бути відкритими на прийом у локальній мережі, щоб успішно отримувати будь-які PUSH-сповіщення на телефонах, які підключені до вашого вайфаю.
PUSH-повідомлення у корпоративному чаті MyChat
Коли ви відправляєте будь-яке повідомлення у приваті чи в конференції, а сервер бачить, що у людей, які повинні отримати цей месадж, є мобільні девайси, що не підключені в даний момент до сервера (away), він відправляє команду на спеціальний PUSH-сервер, щоб той, в свою чергу, зробив пуші, які відправить до Google, Apple чи Huawei. А далі вже вони доправлять їх до мобільних пристроїв.
Природньо, серйозних людей (а інакше нащо би ви встановлювали собі закритий корпоративний чат?) цікавить, а чи безпечно це взагалі? Бо одна справа, коли повідомлення циркулюють у повністю закритій, ізольованій мережі, а зовсім інша — коли вони всеж-таки виходять за периметр.
Одразу маю сказати, що ви можете взагалі заборонити відправку PUSH-сповіщень за допомогою файрволу і тоді мобільні пристрої будуть отримувати повідомлення тільки коли MyChat відкритий на екрані. Це, звісно, не дуже зручно, але максимально безпечно, бо ви будете впевнені, що інформація не йде нікуди, навіть у Гугл чи Еппл. Навіть зашифрована. Щоб зробити це, достатньо заборонити вихідний доступ вашого MyChat Server до хоста mychat-server.com з TCP портом 52000.
Якщо ж отримувати PUSH-повідомлення все ж хочеться (особливо, коли ви працюєте не тільки в локальній мережі, а й через інтернет), то розкажемо, як же ж воно все влаштовано з технічної сторони.
Загальна схема роботи мобільного застосунку для отримання PUSH-сповіщень у MyChat
Спробуємо описати схему максимально просто і коротко. Отже:
- CLIENT — на старті перевіряє можливість підключення на порт 443 (або інший, налаштований в параметрах підключення до сервера MyChat).
- CLIENT — підключається і виконує команду LOGIN для авторизації на сервері мессенджера.
- SERVER — передає службову інформацію для підключення і сесійний ключ для шифрування PUSH-повідомлень (ключ генерується під час кожного нового запуску сервера).
- CLIENT — коли смартфон блокується або переключається на інший додаток — відключається і переходить в режим очікування PUSH-повідомлень.
- SERVER — виконує відправку повідомлення, для цього шифрує повідомлення сесійним ключем за допомогою алгоритма AES та відправляє його на PUSH-SERVER mychat-server.com, порт TCP 52000.
- PUSH-SERVER — розділяє вхідні повідомлення по цільовим ОС (android, ios, huawei), формує відповідні пакети і відправляє на сервери провайдерів.
- PROVIDER — відправляє повідомлення згідно вказаних deviceID у вигляді стандартних notification-повідомлень.
- CLIENT — отримує повідомлення і розшифровує його ключем, отриманим під час авторизації на своєму сервері MyChat.
“Ітогі падведьом” (с) Митець
В цілому, пуш-сповіщення — зручна і корисна річ. Але, якщо корпоративний месенджер працює в закритій мережі, де циркулює надчутлива інформація, то вірити навіть розробникам корпоративного месенджеру не обов’язково. Як і завжди з безпекою, треба вибрати баланс між параноєю та зручністю. Можна пожертвувати зручністю і заборонити пуші повністю.
Або дозволити їх — і отримати зручний інструмент сповіщень про важливі для вас події на мобільних пристроях Android та iOS.