Подтвердить что ты не робот

Как удалить доверенный сертификат CA с установленными приложениями при удалении приложения

У меня есть приложение, которое дает возможность установить сертификат CA, и оно хранится на вкладке пользователя Trusted Credentials и работает как ожидалось.

FYI (Вот как я устанавливаю сертификат):

Intent installIntent = KeyChain.createInstallIntent();
javax.security.cert.X509Certificate x509 = javax.security.cert.X509Certificate.getInstance(caRootCertBytes);
installIntent.putExtra(KeyChain.EXTRA_CERTIFICATE, x509.getEncoded());
installIntent.putExtra(KeyChain.EXTRA_NAME,caRootCertName);
startActivity(installIntent);

Если приложение удалено, сертификат остается в доверенных учетных данных.

Я хочу, чтобы сертификат был удален, когда приложение было удалено.

Я думал об удалении сертификата с помощью deleteEntry метода KeyStore.

FYI (я еще не тестировал. Надеюсь, он должен работать. Я обновлю его после проверки)

javax.security.cert.X509Certificate x509 = javax.security.cert.X509Certificate.getInstance(caRootCertBytes);

KeyStore ks = KeyStore.getInstance("AndroidCAStore")
if (ks != null) 
                        {
                            ks.load(null, null);
                            Enumeration<String> aliases = ks.aliases();
                            while (aliases.hasMoreElements()) 
                            {
                                String alias = (String) aliases.nextElement();
                                java.security.cert.X509Certificate cert = (java.security.cert.X509Certificate) ks.getCertificate(alias);
                                String name = x509.getIssuerDN().getName();                             
                                if (cert.getIssuerDN().getName().contains(name)) 
                                {
                                  ks. deleteEntry(alias)

                                }
                            }
                        }  

Даже если вы рассматриваете выше код работает AFAIK Я не могу зарегистрировать широковещательный приемник для удаления моего собственного приложения.

Как я могу удалить сертификат, установленный моим приложением при удалении моего приложения?

Любая помощь приветствуется!

4b9b3361

Ответ 1

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

Ответ 2

Lookout Mobile опубликовал в блоге об этом из-за событий DigiNotar и предоставил некоторые довольно хорошие (прочитанные: длинные) инструкции, которые вы можете найти здесь.

Суть его в том, что вам нужно вытащить /system/etc/security/cacerts.bks, а затем удалить CA из хранилища, а затем вернуть хранилище обратно на устройство и перезагрузиться. Их инструкции требуют, чтобы у вас был Bouncy Castle (для дешифрования хранилища), root-доступ и рабочее соединение adb. Я не уверен, относится ли это ко всем версиям Android или нет, но я предполагаю, что местоположение хранилища CA не изменилось за какое-то время (если вообще).

Ответ 3

Насколько я знаю, существует только широковещательная передача, которая сообщает, что удаление завершилось ACTION_PACKAGE_REMOVED.

После удаления приложения MyCertApp транслируется событие ACTION_PACKAGE_REMOVED. Код, который обрабатывает ACTION_PACKAGE_REMOVED в MyCertApp, в это время не работает.

Вы можете выполнить пост-обработку только со вторым независимым приложением, которое все еще существует, и это может быть unistall самостоятельно после получения этого MyCertApp.

Другое гипототическое решение может заключаться в том, что ваше приложение имеет пункт меню "удалить MyCertApp". Я не знаю, возможно ли приложению удалить itselt