Оба варианта, которые вы перечисляете здесь, действительно одинаковы. Сертификат клиента - это просто часть открытого ключа частной/открытой пары ключей, которая подписывается каким-то объектом вместе с некоторой идентификационной информацией.
Лучший способ аутентификации клиента - использовать SSL с взаимной аутентификацией. Вы можете использовать самозаверяющие сертификаты здесь, поэтому вам не нужно покупать какой-либо из ЦС, предполагая, что вы контролируете всех клиентов, которым вы хотите разрешить доступ, и управляете серверами, с которыми они будут разговаривать. Это гарантирует, что ваши клиенты получат данные только с вашего законного сервера (настройте систему SSL для вашего приложения, чтобы принимать только самозаверяющий сертификат, который используется вашим сервером), и ваш сервер принимает данные только от ваших авторизованных клиентов (настройте ваш сервер на используйте только самозаверяющие сертификаты, развернутые в вашем приложении, в качестве ресурса для проверки подлинности клиента). Существует полное пошаговое описание того, как это сделать для Android в Application Security for the Android Platform, опубликованном O'Reilly.
Вы правы в том, что вам нужно вставить секретную информацию (закрытый ключ) в свое клиентское приложение, и злоумышленник сможет скомпрометировать ее. Лучшее решение, которое у вас есть в Android прямо сейчас, - это поставить сертификат и закрытый ключ в Keystore, который вы включите в свое приложение APK в качестве ресурса, и приложите ваше приложение к Keystore, когда ему нужно использовать ключ. Это означает, что вашему приложению потребуется пароль в Keystore. Итак, как вы защищаете этот пароль, становится важным. Вы можете запутать свой код, чтобы сделать его более трудным для злоумышленника, чтобы определить этот пароль, но это только замедлит определение злоумышленника, который обращает ваше приложение в обратную сторону. Однако, не требуя от пользователя устройства вводить этот пароль в каждый раз, когда он хочет использовать ваше приложение, это лучшее, что вы можете сделать. Если ваше клиентское приложение, работающее на устройстве, нуждается в доступе к тому, что оно хранит, человек с доступом к этому устройству также сможет получить к нему доступ. Все, что вы можете сделать, усложняет ситуацию.
Это на самом деле один метод - клиент аутентифицирован, не используя сертификат, но используя закрытый ключ сертификата. –