Установка / Доступ к Сертификатам для VPN / WIFI программно на Android - PullRequest
4 голосов
/ 09 сентября 2011

Вот ситуация:

Я работаю над приложением, которое позволяет автоматизировать управление сетевыми подключениями. Пользователи могут настраивать профили WiFi / VPN через приложение, и приложение будет управлять их подключением к этим профилям.

Это все было довольно просто (ну, VPN-стороне потребовалась некоторая хакерская атака), за исключением случаев, когда я подошел к управлению этими соединениями с сетями, которые требовали аутентификацию сертификата. Беда в том, что эти сети в целом используют самозаверяющие сертификаты, и, несмотря на то, с чем я столкнулся в Android, мне кажется, что эти сертификаты должны быть доступны из корневого хранилища сертификатов. Я попытался создать личное хранилище ключей приложения и установить там сертификаты, но, насколько я могу судить, сегменты Android и WiFi не могут получить к нему доступ.

Есть ли способ установить выбранный сертификат в хранилище ключей приложения, создать профили на основе этого хранилища ключей, а затем отправить заполненный профиль менеджеру android wifi / vpn, чтобы разрешить предварительно настроенное соединение?

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

Обновление:

Когда я пытаюсь создать конфигурации wifi и vpn, я пытался ссылаться на установленные сертификаты в хранилище ключей локального приложения. Кажется, он не может найти их, когда конфиги переданы в ОС. Насколько я понимаю, после установки сертификата он становится частью общего хранилища ключей либо на уровне приложения, либо на уровне операционной системы.

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

Заранее спасибо за помощь!

Обновление 2

Для тех из вас, кто все еще интересуется, как это сделать, вот пакеты / классы, на которые вам нужно взглянуть.

com.android.certinstaller. * android.security.Credentials

Немного покопавшись, вы сможете найти подходящие способы построения намерений для установки необходимых сертификатов.

Кроме того, в качестве примечания: если пароль хранилища учетных данных не был установлен на устройстве, первоначальное намерение, которое вы запускаете для установки сертификата, вместо этого только побудит пользователя предоставить пароль хранилища учетных данных. Сертификат не будет установлен. Возможно, есть способ обойти это, но я еще не нашел его.

1 Ответ

6 голосов
/ 09 сентября 2011

Это больше, чем один вопрос, рассмотрите возможность его разделения. Что именно вы пробовали? VPN и WiFi не используют обычные Java KeyStore, ключи доступа и сертификаты через демон склада ключей. Фактические ключи и сертификаты хранятся в виде файлов в /data/misc/keystore. AFAIK API для этого не является общедоступным, но вы, вероятно, могли бы запустить намерение установщика сертификатов, которое сканирует SD-карту на наличие сертификатов и файлов PFX и устанавливает их (это также может быть не публично). Настройки-> Местоположение и безопасность -> «Установка с SD-карты» делает то же самое.

Короче говоря, я не думаю, что вы можете делать то, что пытаетесь сделать, используя только API SDK, вам придется взглянуть на исходный код и рискнуть, если ваше приложение сломается в следующей версии Android.

Обновление: намерения установщика теперь общедоступны в ICS, доступ к ним можно получить через класс KeyChain .

...