Какие знаешь способы защиты соединения клиент-сервер

«Какие знаешь способы защиты соединения клиент-сервер» — вопрос из категории Сети, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

  1. HTTPS – базовый уровень, шифрование трафика через SSL/TLS. Обязательно использовать валидные сертификаты и pinning (CertificatePinning/PublicKeyPinning).
  2. Токены доступа – JWT/OAuth с ограниченным сроком жизни + refresh-токены. Хранить в SecureSharedPreferences/EncryptedSharedPreferences.
  3. Подпись запросов – хеширование параметров с секретным ключом (HMAC) для верификации на сервере.
  4. Защита от MITM – реализация CertificatePinning через OkHttp:
val certificatePinner = CertificatePinner.Builder()
    .add("api.example.com", "sha256/AAAAAAAA...")
    .build()
val client = OkHttpClient.Builder()
    .certificatePinner(certificatePinner)
    .build()
  1. Шифрование данных – AES/GCM для чувствительных данных перед отправкой.
  2. Заголовки безопасностиStrict-Transport-Security, Content-Security-Policy на сервере.

Дополнительно: obfuscation (ProGuard/R8), защита от реверс-инжиниринга.