Как программно установить сертификат CA (для конфигурации EAP WiFi) в Android? - PullRequest
7 голосов
/ 27 января 2012

Моя цель: Создание конфигурации EAP WiFi - включая сертификат CA - в Android программно.

Проблема: Как установить сертификат CA программно (а затем ссылаться на этот сертификат в конфигурации EAP WiFi)?

Я нашел очень полезную ссылку, которая позволяет мне создавать и сохранять конфигурации EAP WiFi здесь: Как программно создавать и считывать конфигурации WEP / EAP WiFi в Android?

Однако это предполагает, что вы уже установили сертификат CA на устройстве. Я хотел бы установить сертификат в своем приложении - либо из ресурсов приложения, либо отправленных с сервера.

Это вообще возможно? (Укоренение не вариант в этом случае.) Если да, то как?

Дополнительная информация ...

Я также нашел способ добавить сертификат в хранилище ключей: https://stackoverflow.com/a/4490543/1172101

Однако это используется специально для создания защищенного сокета и подключения через HTTPS. Я хочу использовать сертификат для WiFi.


К сожалению, мне еще не удалось найти способ установить сертификат CA программно - из приложения.

Однако в Android можно установить сертификат через веб-браузер. Таким образом, решение (на данный момент) заключается в следующем: Запустите намерение открыть в веб-браузере URL-адрес, который идет непосредственно к сертификату CA.

Это работает, но есть некоторые проблемы:

  • Пользователь должен назвать сертификат. Это сложная задача, потому что мы добавляем конфигурацию WiFi программно. Таким образом, мы должны попросить пользователя дать сертификату то же имя.
  • Пользователь должен ввести пароль. Если у них не установлен пароль, пользователь создаст его и введет его дважды. Если они установили пароль безопасности, пользователь должен будет запомнить этот пароль и ввести его.
  • Предполагая, что пользователь успешно завершил эти шаги, он остается висеть в браузере.

Это приводит к нескольким вопросам:

  • В моем приложении есть способ заставить имя сертификата, который пользователь устанавливает через браузер?
  • Можно ли из моего приложения узнать, когда установка сертификата была завершена, а затем снова сфокусироваться на моем приложении?

Просто дайте мне знать, если вам нужны какие-либо разъяснения.

Ответы [ 3 ]

6 голосов
/ 23 апреля 2012

Вы не можете установить его напрямую, поскольку несистемные приложения не имеют доступа к хранилищу ключей. В ICS есть API для этого KeyChain.createInstallIntent(), который запускает системное диалоговое окно, спрашивающее пользователя, хотят ли они установить сертификат. В pre-ICS вы можете достичь того же, запустив намерение установки, используя имя компонента напрямую (хотя это может работать, а может и не работать на всех устройствах). Пройдя через браузер, вы можете сделать то же самое.

Что касается ваших вопросов:

  1. вы не можете указать / заставить имя. Почему тебя волнует настоящее имя?
  2. Не совсем через браузер. Если вы используете системное намерение, вы можете вернуться к своей активности и получить обратный вызов, если вы используете startActivityForResult().

Обновление: Android 4.3 имеет WifiEnterpriseConfig , который создает профиль и устанавливает ключи и сертификаты в хранилище учетных данных системы. Вам нужно только разрешение CHANGE_WIFI_STATE.

0 голосов
/ 23 августа 2013

Я сейчас решаю те же проблемы.Лучшее, что я нашел, это KeyChain.choosePrivateKeyAlias ​​(), позволяющий пользователю выбрать, какой сертификат использовать для SSL.Оттуда вы можете получить имя псевдонима и передать его в конфигурацию Wi-Fi предприятия.

0 голосов
/ 31 августа 2012

Я ищу то же самое ... что касается вашего вопроса, @Nikolay:

вы не можете указать / заставить имя. Почему тебя волнует настоящее имя?

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

final String ENTERPRISE_CA_CERT = "";

В этом примере в профиле не используется имя CA, но это может иметь место для других профилей EAP.

...