¿Cómo eliminar el certificado instalado por el usuario mediante programación?

Había instalado un certificado programmatically.

Puedo desinstalarlo manualmente al ir Settings -> Security -> Trusted Credentials -> User -> Choose the certificate and click the remove button

Quiero quitar el certificado mediante programación.

Aquí está el código que intenté pero no funcionó.

 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) } } } 

Ref para saber por qué elegí deleteEntry

Aquí está el registro de errores que recibí

 05-19 18:27:40.789: W/System.err(14588): java.lang.UnsupportedOperationException 05-19 18:27:40.792: W/System.err(14588): at com.android.org.conscrypt.TrustedCertificateKeyStoreSpi.engineDeleteEntry(TrustedCertificateKeyStoreSpi.java:82) 05-19 18:27:40.792: W/System.err(14588): at java.security.KeyStore.deleteEntry(KeyStore.java:410) 05-19 18:27:40.792: W/System.err(14588): at com.proj.test.MyActivity$4.onClick(MyActivity.java:336) 05-19 18:27:40.792: W/System.err(14588): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:162) 05-19 18:27:40.792: W/System.err(14588): at android.os.Handler.dispatchMessage(Handler.java:102) 05-19 18:27:40.792: W/System.err(14588): at android.os.Looper.loop(Looper.java:135) 05-19 18:27:40.793: W/System.err(14588): at android.app.ActivityThread.main(ActivityThread.java:5254) 05-19 18:27:40.793: W/System.err(14588): at java.lang.reflect.Method.invoke(Native Method) 05-19 18:27:40.794: W/System.err(14588): at java.lang.reflect.Method.invoke(Method.java:372) 05-19 18:27:40.794: W/System.err(14588): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 05-19 18:27:40.794: W/System.err(14588): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

Esta pregunta está algo relacionada con mi otra pregunta

Cualquier ayuda es apreciada!

Parece que la implementación de la interfaz KeyStoreSpi simplemente no admite la eliminación:

 @Override public void engineDeleteEntry(String alias) { throw new UnsupportedOperationException(); } 

https://android.googlesource.com/platform/external/conscrypt/+/master/src/platform/java/org/conscrypt/TrustedCertificateKeyStoreSpi.java#81

Puede hacerlo en Android 5.x con un propietario de dispositivo mediante el método uninstallCaCert() . Un propietario de dispositivo sólo se puede instalar antes de que el dispositivo se aprovisione.

https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#uninstallCaCert(android.content.ComponentName , byte [])

  • Android ClassNotFoundException: No encontró la clase en el path
  • No hay ningún menú Ejecutar o botón de barra de herramientas en Eclipse Juno
  • IntelliJ MyClass.class (No hay tal archivo o directorio) cuando se ejecuta la aplicación
  • Enviar comandos APDU a la tarjeta USIM / SIM en android
  • ¿El zócalo del cliente androide, cómo leer datos?
  • Caso de interés en multithreading con int volátil
  • Por qué el flag isLockTaskPermitted es falso
  • Android: Mi aplicación se bloquea cuando hay un campo de edición de texto en blanco
  • Uso correcto de Universal Image Loader
  • Quitar ActionBar en API debajo de 11
  • Android - paint.setShadowLayer Omitiendo shadowColor
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.