Detectar el certificado instalado en mi dispositivo Android
Estoy instalando un certificado en mi aplicación cuando se inicia la aplicación. He pasado por algunos de los enlaces que se muestran a continuación y con éxito instalar el certificado.
-
Http://nelenkov.blogspot.in/2011/12/ics-trust-store-implementation.html
- ¿Cómo comprobar si APK está firmado o "debug build"?
- Se ha producido un error en la subida de la conexión con la nueva versión de una aplicación en Google Play.
- Uso de la versión personalizada de la aplicación de App Engine en Android
- Vista web android con certificado de cliente
- ¿Cómo forzar la desinstalación de la aplicación para actualizarla?
-
Http://pastebin.com/Bn6qSYHx
-
¿Cómo instalar mediante programación un certificado de CA (para configuración EAP WiFi) en Android?
-
Cómo instalar el certificado de CA mediante programación en Android sin la interacción del usuario
Llegué a saber que no podemos instalar el certificado en silencio sin la interacción del usuario.Actualmente no sé cómo detener la solicitud cada vez que el usuario abre mi aplicación.
Cada vez que mi aplicación se inicia actualmente cada vez que pida al usuario que instale el certificado. ¿Hay alguna manera que puedo detectar si un certificado (en este caso, mi certificado) ya está instalado o no, de forma programática.
Snippet de código en el que tengo instalado el certificado en mi aplicación
private void installCertificate() { try { BufferedInputStream bis = new BufferedInputStream(getAssets().open(MY_CERT)); byte[] keychain = new byte[bis.available()]; bis.read(keychain); Intent installIntent = KeyChain.createInstallIntent(); X509Certificate x509 = X509Certificate.getInstance(keychain); installIntent.putExtra(KeyChain.EXTRA_CERTIFICATE, x509.getEncoded()); installIntent.putExtra(KeyChain.EXTRA_NAME, MY_CERT); startActivityForResult(installIntent, INSTALL_KEYCHAIN_CODE); } catch (IOException e) { e.printStackTrace(); } catch (CertificateException e) { e.printStackTrace(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == INSTALL_KEYCHAIN_CODE) { switch (resultCode) { case Activity.RESULT_OK: doTheTask(); break; case Activity.RESULT_CANCELED: finish(); break; default: super.onActivityResult(requestCode, resultCode, data); } } }
También FYI, installCertificate () se llama desde onCreate ().
Por favor, ayúdame por lo mismo. Cualquier ayuda será apreciada.
Consulta: Cuando se solicita el nombre del certificado, el texto introducido aparece como se selecciona y en la opción de cambio / cambio de orientación aparece. Cualquier cuerpo sabe cómo detener la selección de texto cuando llega el mensaje?
- Ampliación del certificado de aplicación de Android después de su vencimiento
- Error al generar el archivo final: el certificado de depuración expiró el
- Instalación del certificado de Android
- Android Studio - depurar la tienda de claves
- ¿Cómo puedo importar un certificado de la CA en Android 4.4.2 en el emulador?
- ¿Cómo instalar el certificado de CA de confianza en un dispositivo Android?
- Servicios de reproducción de Google que devuelven un token firmado con una clave distinta de Google
- HTTP / 1.1 400 Petición incorrecta en httpGet con autenticación base
Utilicé debajo de un pedazo de código para verificar si mi certificado está instalado o no
try { KeyStore ks = KeyStore.getInstance("AndroidCAStore"); if (ks != null) { ks.load(null, null); Enumeration aliases = ks.aliases(); while (aliases.hasMoreElements()) { String alias = (String) aliases.nextElement(); java.security.cert.X509Certificate cert = (java.security.cert.X509Certificate) ks.getCertificate(alias); if (cert.getIssuerDN().getName().contains("MyCert")) { isCertExist = true; break; } } } } catch (IOException e) { e.printStackTrace(); } catch (KeyStoreException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (java.security.cert.CertificateException e) { e.printStackTrace(); }
Añadir alguna información adicional a la respuesta de @ Android (no puedo comentar aún), cuyo código funcionó para mí solo en dispositivos con Android 4.0 o superior.
Para los dispositivos pre IceCream Sandwich (API <14):
boolean isCertExist; TrustManagerFactory tmf; try { tmf = TrustManagerFactory.getInstance(TrustManagerFactory .getDefaultAlgorithm()); tmf.init((KeyStore) null); X509TrustManager xtm = (X509TrustManager) tmf.getTrustManagers()[0]; for (X509Certificate cert : xtm.getAcceptedIssuers()) { if (cert.getIssuerDN().getName().contains("MyCert")) { isCertExist = true; break; } } } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (KeyStoreException e) { // TODO Auto-generated catch block e.printStackTrace(); }
Para dispositivos con Android 4.0 y versiones posteriores (API> = 14):
boolean isCertExist; try { KeyStore ks = KeyStore.getInstance("AndroidCAStore"); if (ks != null) { ks.load(null, null); Enumeration aliases = ks.aliases(); while (aliases.hasMoreElements()) { String alias = (String) aliases.nextElement(); java.security.cert.X509Certificate cert = (java.security.cert.X509Certificate) ks.getCertificate(alias); if (cert.getIssuerDN().getName().contains("MyCert")) { isCertExist = true; break; } } } } catch (IOException e) { e.printStackTrace(); } catch (KeyStoreException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (java.security.cert.CertificateException e) { e.printStackTrace(); }
KeyChain.createInstallIntent, la intención creada llamará a android.security.certinstaller para instalar certificados y, a continuación, el certinstaller imprimirá el registro cuando se instalen los certificados. Por lo que puede volcar el registro de cat para comprobar si el certificado está instalado o no. (Puede obtener el alias si el usuario cambió el nombre de la tienda de certificado)
Lectura de una tienda de confianza de la CA como se muestra a continuación
KeyStore ks = KeyStore.getInstance("AndroidCAStore");
Sólo obtendrá los certificados de CA y no los certificados de usuario / cliente. No es necesario que el certificado de cliente comparta el mismo alias que el certificado de la entidad emisora de certificados.
- ¿Funciona Google Cloud Messaging (GCM) con Kindle Fire?
- ¿Cómo hacer el código de versión en Android sin advertencias de compilador?