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.

  • ¿Cómo puedo validar un android.net.http.SsLCertificate con un X509TrustManager?
  • Agregar información de certificados de servidor a Trust Manager Android mediante programación
  • ¿No pudo validar la firma del certificado?
  • Android manual X509 validación de la cadena de certificados
  • Agregar varios certificados SSL a Android KeyStore no funciona. (Desde el archivo de recursos)
  • ¿Es este android SSL pinning implementación correcta y por qué este error aparece en el logcat?
  • Android - convertir la cadena de certificados pkcs12 al objeto de certificado x509 para bks keystore
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.