Instalar certificado X509 mediante programación en mi caso

Estoy desarrollando un proyecto de Android. Tengo una cadena de certificados PEM:

-----BEGIN CERTIFICATE----- MIIEczCCA1ugAwIBAgIBADANBgkqhkiG9w0BAQQFAD..AkGA1UEBhMCR0Ix EzARBgNVBAgTClNvbWUtU3RhdGUxFDASBgNVBAoTC0..0EgTHRkMTcwNQYD VQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5IENlcn..XRpb24gQXV0aG9y ...MANY LINES... It8una2gY4l2O//on88r5IWJlm1L0oA8e4fR2yrBHX..adsGeFKkyNrwGi/ 7vQMfXdGsRrXNGRGnX+vWDZ3/zWI0joDtCkNnqEpVn..HoX -----END CERTIFICATE----- 

(He asignado la cadena de certificados anterior a una variable denominada CERT_STR )

Convierte por encima de la cadena PEM a X509Certificate por:

 byte[] certBytes = CERT_STR.getBytes(); CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); InputStream certIs = new ByteArrayInputStream(certBytes); // now I get the X509 certificate from the PEM string X509Certificate certificate = (X509Certificate) certificateFactory.generateCertificate(certIs); 

A continuación, intento instalar el certificado mediante programación por:

 Intent intent = KeyChain.createInstallIntent(); // because my PEM only contains a certificate, no private key, so I use EXTRA_CERTIFICATE intent.putExtra(KeyChain.EXTRA_CERTIFICATE, certificate.getEncoded()); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); 

Cuando ejecuto mi aplicación, veo el diálogo del sistema aparece diciendo "Extraer …", sé que el sistema está extrayendo mi certificado, pero ese diálogo se muestra allí todo el tiempo diciendo "Extraer …".

¿Por qué? ¿Dónde estoy mal en mi código para instalar el certificado?

Probablemente no esté usando correctamente el certificado X509 creado. Después de trabajar en mi final y no vi ningún diálogo "Extraer …" (Nexus 5X, Android 7.0):

 String x509cert = "-----BEGIN CERTIFICATE-----\n" + "MIICrjCCAhegAwIBAgIJAO9T3E+oW38mMA0GCSqGSIb3DQEBCwUAMHAxCzAJBgNV\n" + "BAYTAlVaMREwDwYDVQQHDAhUYXNoa2VudDENMAsGA1UECgwERWZpcjEQMA4GA1UE\n" + "CwwHSVQgZGVwdDEQMA4GA1UEAwwHZWZpci51ejEbMBkGCSqGSIb3DQEJARYMaG9z\n" + "dEBlZmlyLnV6MB4XDTE2MTExMDA4MjIzMFoXDTE2MTIxMDA4MjIzMFowcDELMAkG\n" + "A1UEBhMCVVoxETAPBgNVBAcMCFRhc2hrZW50MQ0wCwYDVQQKDARFZmlyMRAwDgYD\n" + "VQQLDAdJVCBkZXB0MRAwDgYDVQQDDAdlZmlyLnV6MRswGQYJKoZIhvcNAQkBFgxo\n" + "b3N0QGVmaXIudXowgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL60mG0Gpl7s\n" + "3qMnZcURB1xk5Qen6FN0+AJB5Z/WHA50n1MUkXNY28rkEYupkxpfEqR+/gXgBUAm\n" + "FACA3GSdoHMMY1kdeAzxsYbBEbtGKHICF/QFGTqScWmI6uBUwzsLDLv1ELef/zEY\n" + "Ru/krXtNh8ZNYyfwVKyZaB9+3M2yOqATAgMBAAGjUDBOMB0GA1UdDgQWBBS1nH3O\n" + "ecLDrIZLZ/f1WsNL/xtuEzAfBgNVHSMEGDAWgBS1nH3OecLDrIZLZ/f1WsNL/xtu\n" + "EzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4GBAGzjJnXODvF9UHBKHAUF\n" + "kzisr78Og5BrKyAgdnjH196Jg4MO7RNJdQAmuAIk9aBB/jvAiznhhbcD3mYImH+h\n" + "F0Scewk5m736ydGhkcUpmxA5ye1hajjs9V7PQD2O4a8rNJSlJjiWRWSqxTfH79Ns\n" + "B7x2HND9LU/iz02ugGJ8vwg8\n" + "-----END CERTIFICATE-----\n"; Intent intent = KeyChain.createInstallIntent(); intent.putExtra(KeyChain.EXTRA_CERTIFICATE, x509cert.getBytes()); startActivity(intent); 

Para generar el certificado anterior, utilicé los siguientes pasos (basados ​​en la generación de claves y certificados para SSO ):

 $ openssl genrsa -out rsaprivkey.pem 1024 $ openssl req -new -x509 -key rsaprivkey.pem -out rsacert.pem $ ls rsacert.pem rsaprivkey.pem 

Luego simplemente copiar / pegar la salida de cat rsacert.pem a x509cert .

Espero que esto ayude.

  • Android - convertir la cadena de certificados pkcs12 al objeto de certificado x509 para bks keystore
  • Agregar varios certificados SSL a Android KeyStore no funciona. (Desde el archivo de recursos)
  • Agregar información de certificados de servidor a Trust Manager Android mediante programación
  • ¿Cómo generamos un hash SHA256 codificado en base64 de SubjectPublicKeyInfo de un certificado X.509, para la fijación del certificado de Android N?
  • Instalar certificado de usuario a través de ADB
  • Android - ¿Hay una manera de obtener platform.pk8 y platform.x509.pem la ROM firmada con?
  • Android manual X509 validación de la cadena de certificados
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.