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
- Servicios de reproducción de Google que devuelven un token firmado con una clave distinta de Google
- Android Central Keystore
- ¿Hay alguna forma de comprobar si la firma de una aplicación está depurada o publicada?
- Error de Play Store "Subiste un APK firmado con un certificado inseguro"
- Google Playstore: ¿reemplazar la aplicación cuando se utiliza otro certificado?
-
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?
- Autenticación con certificados de cliente con PhoneGap
- ¿Cómo instalar el certificado de CA de confianza en un dispositivo Android?
- Android Studio - depurar la tienda de claves
- Instalación / Acceso a Certs para VPN / WIFI mediante programación en Android
- ¿Cómo puedo importar un certificado de la CA en Android 4.4.2 en el emulador?
- Se ha producido un error en la subida de la conexión con la nueva versión de una aplicación en Google Play.
- Ampliación del certificado de aplicación de Android después de su vencimiento
- 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?