В чем разница в реализации HTTPS для мобильных и десктопных приложений?

Ответ

Протокол 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, и хоть ты тресни, но безопасность. А десктопные — более гибкие, живут в системе и на её политики полагаются. Вот такая, сука, дичь!