Как правило, клиентские SSL-сертификаты хранятся в хранилищах ключей (BKS, отформатированных в случае Android), и хранилище ключей включено как ресурс в вашем APK. Хранилища шифруются и защищены паролем. Таким образом, этот клиентский сертификат не может быть легко извлечен из APK, поскольку он хранится в зашифрованном виде.
Теперь ... что вы будете делать с паролем?Вот суть дела, и у вас есть две альтернативы.
Если вы хотите, чтобы ваше приложение могло связываться с сервером (чтобы, чтобы иметь доступ к сертификату) без взаимодействия с пользователем, вам необходимо вставить пароль в свое приложение, а затем, да, злоумышленник может обратный инженер кода, чтобы найти его, захватить хранилище ключей, а затем расшифровать его для восстановления сертификата. Вы можете применять такие методы, как обфускация вашего кода, чтобы это было труднее для злоумышленника, но это просто замедлит кого-то, а не предотвратит его.
Ваша альтернатива - запрашивать у пользователя пароль каждый раз, когда ваше приложение взаимодействует с сервером и использует его для дешифрования хранилища ключей (или спрашивает, когда приложение запускается и кеширует сертификат на определенное время). Преимущество в том, что если кто-то обратит инженеров ваш APK, они найдут зашифрованное хранилище ключей и пароль, чтобы ваш сертификат был безопасным. Недостатком является предоставление пользователем пароля.
Какой подход лучше всего? Это полностью зависит от чувствительности данных, которые вы касаетесь, и от уровня риска, который вы готовы принять. Только ты можешь ответить на этот вопрос.
Что вы подразумеваете под "просто использовать обычный доверенный сертификат"? Это то, что вы делаете, не так ли? – EJP
Я изменил вопрос. Скажи мне, если это более ясно. –
Гораздо лучше. См. Мой ответ. – EJP