Как и какой сертификат сервера использовать с аутентификацией SSL-сертификата клиента Android - PullRequest
5 голосов
/ 10 мая 2011

Я разрабатываю сетевое приложение для Android, которое использует SSL-сертификаты клиента для аутентификации и защиты соединений с моим сервером.

У меня два вопроса: (1) я должен использовать самозаверяющий сертификат сервера или коммерческий? И (2) я должен включить сертификат сервера в файл apk, который устанавливают пользователи, или мне нужно подключить приложение к моему серверу, чтобы получить сертификат сервера по сети (с целью заставить устройство доверять сертификату сервера)?

Когда я спрашиваю, что мне «следует» делать, я спрашиваю, каковы преимущества и недостатки каждого варианта?

Сейчас я использую самоподписанный сертификат, включенный в файл apk. Когда пользователь запускает приложение в первый раз, оно считывает включенный самозаверяющий сертификат в хранилище доверенных сертификатов, чтобы устройство без проблем подключалось к моему серверу. Я полагаю, что если я использую коммерческий сертификат, мой вопрос № 2 может стать спорным, поскольку устройство может доверять сертификату с сервера без проблем.

Еще одна, возможно, важная деталь: это приложение не распространяется через рынок Android. Пользователи будут загружать приложение с моего сервера, поэтому я могу включить любой серверный сертификат, который я хочу, в том числе другой для каждого пользователя, если мне нужно.

У меня есть свои собственные представления о различных преимуществах и недостатках каждого возможного ответа на два моих вопроса, но мне интересно, что по этому поводу скажут другие - мыслящие в отношении безопасности.

Заранее спасибо!

1 Ответ

1 голос
/ 05 августа 2013

Не вижу причин не подписывать себя. Я бы поднял его на ступеньку выше и создал бы свой собственный центр сертификации. Это позволяет вам гарантировать, что вы будете подключаться только к серверам, которые имеют сертификаты, подписанные вашим настраиваемым центром сертификации, что намного лучше (т.е. фактическая криптографическая безопасность), чем простая проверка отпечатков пальцев сертификата на сервере.

Вот пример того, как создать пользовательский CA, используя привязки OpenSSL в Ruby. Процедура одинакова на большинстве языков. https://github.com/augustl/ruby-openssl-cheat-sheet/blob/master/certificate_authority.rb

Конечно, вы также можете использовать сертификат клиента, который должен быть подписан вашим пользовательским центром сертификации, чтобы ваш сервер мог принять запрос. Обратите внимание, что это будет неясно - злоумышленник сможет извлечь из вашего приложения закрытый ключ и пользовательский сертификат, подписанный ЦС. Если ваше приложение может отправлять запросы на сервер, любой может:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...