Ответ
Протокол TLS/HTTPS одинаков, но различия касаются безопасности, управления сертификатами и сетевого окружения.
| Аспект | Мобильное приложение | Десктопное приложение |
|---|---|---|
| Certificate Pinning | Рекомендуется и часто используется. Публичный ключ или сертификат жестко вшивается в приложение для защиты от MITM-атак, даже если злоумышленник имеет доверенный корневой сертификат. | Используется реже, но возможно. Чаще полагаются на системное хранилище сертификатов. |
| Источник доверия | Может использовать как вшитые сертификаты, так и системное хранилище ОС (Keychain в iOS, KeyStore в Android). | Практически всегда полагается на системное хранилище сертификатов ОС (Windows Certificate Store, macOS Keychain, Linux CA bundle). |
| Корпоративные прокси и MITM | Могут сталкиваться с MITM-прокси в корпоративных сетях. Certificate Pinning может ломать такое соединение, требуя исключений. | Чаще сталкиваются с корпоративными MITM-прокси, которые устанавливают свои корневые сертификаты в системное хранилище, поэтому соединение работает "прозрачно". |
| Обновление доверия | Сложнее обновить закрепленные (pinned) ключи — требуется выпуск новой версии приложения. | Проще: обновление списка доверенных центров сертификации (CA) происходит через ОС. |
| Производительность | Проверка цепочки сертификатов и pinning на слабых устройствах может требовать оптимизации. | Вычислительные ресурсы, как правило, достаточны. |
Пример Certificate Pinning в Android (OkHttp):
val certificatePinner = CertificatePinner.Builder()
.add("api.example.com", "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=")
.build()
val client = OkHttpClient.Builder()
.certificatePinner(certificatePinner)
.build()
Пример игнорирования ошибок SSL (НЕ для продакшена, только для тестов):
# Python (requests) - ОПАСНЫЙ ПРИМЕР, демонстрирующий разницу в подходе
import requests
import ssl
# Десктоп-подход (доверяет системным сертификатам)
response_safe = requests.get('https://api.example.com')
# Опасный обход проверки (иногда используется в тестах мобильных приложений с самоподписанными сертификатами)
response_unsafe = requests.get('https://api.example.com', verify=False) # НЕ ДЕЛАЙТЕ ТАК В ПРОДАКШЕНЕ
Вывод: Мобильные приложения чаще используют агрессивные методы безопасности (pinning), жертвуя гибкостью, в то время как десктопные приложения больше полагаются на инфраструктуру и политики ОС.
Ответ 18+ 🔞
Да ты посмотри, какая, блядь, интересная хуйня вырисовывается! Вроде и там HTTPS, и там HTTPS, а под капотом, сука, разница — как между «Муму» и «Пиноккио», ёпта!
Вот смотри, табличку нарисовали, умные люди, а там всё как на ладони, блядь.
| Штука | В телефоне (мобила) | На компе (десктоп) |
|---|---|---|
| Certificate Pinning (это когда ключ вшит) | Да, часто, любят это дело. Прям в апку публичный ключ засовывают, чтоб никакой левый дядя с прокси-сертификатом не влез. Даже если у него в системе доверенный сертификат висит — пошёл нахуй! | Редко, но можно. Обычно на систему смотрят — что в хранилище ОС лежит, тому и верим. |
| Кому верим? | Может на свой вшитый ключ смотреть, а может в системное хранилище ОС заглянуть (Keychain в айфоне, KeyStore в андроиде). | Практически всегда, блядь, верит системному хранилищу (в винде своё, в маке своё, в линуксе свой набор корневых сертификатов). |
| Прокси корпоративные и MITM | Могут влететь в корпоративную сеть, где их трафик через прокси-сертификат прогоняют. А у них pinning вшит — и всё, пиздец соединению, ошибка. Надо исключения городить. | Тут это, блядь, обычное дело. Поставили компании свой корневой сертификат в систему — и все приложения доверяют, соединение работает «как надо». |
| Как обновить доверие | О, ёперный театр! Если ключ вшит, и его надо сменить — только новая версия приложения, через магазин. Заебись процесс. | Легкотня! Обновили список доверенных центров в ОС — и все приложения подхватили. |
| Скорость | На слабых телефонах проверка цепочки и pinning могут подтормаживать, надо оптимизировать. | Компьютер, как правило, сожрёт любые вычисления, не поперхнётся. |
Ну и примеры кода, блядь, чтобы совсем понятно было. Вот как pinning в андроиде делают (OkHttp):
val certificatePinner = CertificatePinner.Builder()
.add("api.example.com", "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=")
.build()
val client = OkHttpClient.Builder()
.certificatePinner(certificatePinner)
.build()
А вот, смотри, опасный пример на питоне, который показывает разницу в подходах. Это для тестов, нахуй, а не для прода!
# Python (requests) - ОПАСНЫЙ ПРИМЕР, демонстрирующий разницу в подходе
import requests
import ssl
# Десктоп-подход (доверяет системным сертификатам)
response_safe = requests.get('https://api.example.com')
# Опасный обход проверки (иногда используется в тестах мобильных приложений с самоподписанными сертификатами)
response_unsafe = requests.get('https://api.example.com', verify=False) # НЕ ДЕЛАЙТЕ ТАК В ПРОДАКШЕНЕ
Итог, блядь: Мобильные приложения — как Герасим, максималисты ёбаные. Захомутали pinning, и хоть ты тресни, но безопасность. А десктопные — более гибкие, живут в системе и на её политики полагаются. Вот такая, сука, дичь!