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
)
- cómo instalar el certificado de CA mediante programación en Android sin interacción del usuario
- Mostrar certificado de Android
- ¿Cómo puedo validar un android.net.http.SsLCertificate con un X509TrustManager?
- Cómo abrir MIME - "application / x-509-server-cert" tipo en Android Moto G?
- ¿No pudo validar la firma del certificado?
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?
- Android KeyStore: Error al generar certificado autofirmado, cadena de fecha no válida
- Aceptar certificados SSL autofirmados-> donde configurar TrustManager predeterminado
- ¿Cómo implementar la fijación de hojas / certificados intermedios en Android?
- Instalación del certificado autofirmado mediante programación
- Org.apache.http.client.ClientProtocolException
- ¿Cómo instalar mediante programación un certificado de CA (para configuración EAP WiFi) en Android?
- Cómo importar certificado SSL autofirmado a Volley en Android 4.1+
- ¿Es este android SSL pinning implementación correcta y por qué este error aparece en el logcat?
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.
- PyQt en Android
- Cómo ocultar el BottomNavigationView debajo del teclado con el conjunto adjustResize