У меня есть приложение для центральной системы, которое позволяет пользователю устанавливать ЦС, которые могут использоваться для подключения HTTPS или Wi-Fi Enterprise.Это приложение может рассматриваться как менеджер сертификатов, который будет обслуживать несколько приложений.(Хотя это и другие вещи, в основном конфигурация)
Я работаю на Android Pie, и я впервые работаю на Android, так что извините за нелюбовь.
Основано на отличном обсуждении вссылки ниже, включая замечательный блог Николая
Центральное хранилище Android https://nelenkov.blogspot.com/2011/12/ics-trust-store-implementation.html Программно добавить центр сертификации, сохраняя сертификаты SSL системы Android
Я пытаюсь:
1) Сделать мое приложение владельцем устройства, а затем использовать диспетчер политик устройств для установки сертификата
Я сделал это (скопируйте правила в makefile моей платы)
упаковка device_policies.xml в / data / system /
упаковка device_owner.xml в / data / system /
Изменение AndroidManifest.xml и реализация класса администратора устройства
2) Добавьте сертификаты в центральный AndroidCaStore с помощью Keystore APis
. Для этого я
Считываю сертификаты из файла
Получить keystorЭкземпляр "AndroidCStore"
setCertificate ()
**Code snippet For (1)**
DevicePolicyManager dpm = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName adminComp = new ComponentName(context, ConfigSettingsAdminReceiver.class);
if (dpm.isAdminActive(adminComp))
{
String CERT_FILE_1 = "/data/sam/ca1.crt";
FileInputStream cert1 = new FileInputStream(CERT_FILE_1);
byte [] cert1_contents = new byte[(int)cert1.available()];
cert1.read(cert1_contents);
if (dpm.installCaCert(adminComp, cert1_contents))
{
Plog.d("installCustCertificate | SAM | Installed custom cert 1");
}
else
{
Plog.e("installCustCertificate | SAM | FAIL Cert 1");
}
}
**Code snippet For (2)**
KeyStore keyStoreAndroid = KeyStore.getInstance("AndroidCAStore");
InputStream fis = new BufferedInputStream(inputStream);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate cert;
keyStoreAndroid.load(null, null);
try{
cert = cf.generateCertificate(fis);
keyStoreAndroid.setCertificateEntry("custcert", cert);
} finally {
cf.close();
}
Для (1) выше,
Я не могу установить свое приложение в качестве владельца устройства,Я мог бы сделать это администратором устройства при загрузке.
Однако я при вызове installCaCert () API-интерфейса DevicePolicyManager получаю сообщение об ошибке:
AdminComponentInfo {com.sam.configsettings / com.sam.configsettings.ConfigSettingsAdminReceiver} не владеет профилем
При проверке / data / system я вижу, что device_policies.xml присутствует, но нет никаких признаков device_owner.xml
For (2) выше,
Я получаю сообщение об ошибке "исключение: java.lang.UnsupportedOperationException"
Есть идеи, чего мне не хватает?