Вот ситуация:
Я работаю над приложением, которое позволяет автоматизировать управление сетевыми подключениями. Пользователи могут настраивать профили WiFi / VPN через приложение, и приложение будет управлять их подключением к этим профилям.
Это все было довольно просто (ну, VPN-стороне потребовалась некоторая хакерская атака), за исключением случаев, когда я подошел к управлению этими соединениями с сетями, которые требовали аутентификацию сертификата. Беда в том, что эти сети в целом используют самозаверяющие сертификаты, и, несмотря на то, с чем я столкнулся в Android, мне кажется, что эти сертификаты должны быть доступны из корневого хранилища сертификатов. Я попытался создать личное хранилище ключей приложения и установить там сертификаты, но, насколько я могу судить, сегменты Android и WiFi не могут получить к нему доступ.
Есть ли способ установить выбранный сертификат в хранилище ключей приложения, создать профили на основе этого хранилища ключей, а затем отправить заполненный профиль менеджеру android wifi / vpn, чтобы разрешить предварительно настроенное соединение?
Кажется, это возможно, но мне пока не удалось быть достаточно умным, чтобы заставить его работать.
Обновление:
Когда я пытаюсь создать конфигурации wifi и vpn, я пытался ссылаться на установленные сертификаты в хранилище ключей локального приложения. Кажется, он не может найти их, когда конфиги переданы в ОС. Насколько я понимаю, после установки сертификата он становится частью общего хранилища ключей либо на уровне приложения, либо на уровне операционной системы.
Мне нужно сохранить доступ к сертификатам внутри, поэтому я не могу перенести их на SD-карту. Даже если бы я перенес их на SD-карту, я бы не смог потребовать от пользователя вручную установить сертификат, мне нужно, чтобы это выполнялось в фоновом режиме, чтобы упростить настройку. Я копался в источнике и не нашел никакого очевидного решения для этого, но я просто надеялся, что кто-то наткнулся на это раньше, и я просто упускал его
Заранее спасибо за помощь!
Обновление 2
Для тех из вас, кто все еще интересуется, как это сделать, вот пакеты / классы, на которые вам нужно взглянуть.
com.android.certinstaller. *
android.security.Credentials
Немного покопавшись, вы сможете найти подходящие способы построения намерений для установки необходимых сертификатов.
Кроме того, в качестве примечания: если пароль хранилища учетных данных не был установлен на устройстве, первоначальное намерение, которое вы запускаете для установки сертификата, вместо этого только побудит пользователя предоставить пароль хранилища учетных данных. Сертификат не будет установлен. Возможно, есть способ обойти это, но я еще не нашел его.