He creado mi propio certificado de CA y ahora quiero instalarlo en mi dispositivo Android Froyo (HTC Desire Z), para que el dispositivo confíe en mi certificado.
Android almacena certificados de CA en su almacén de claves Java en /system/etc/security/cacerts.bks
. Copié el archivo a mi computadora, agregué mi certificado usando portecle 1.5 y lo devolví al dispositivo.
Ahora, Android no parece recargar el archivo automáticamente. He leído en varias publicaciones de blog que necesito reiniciar el dispositivo. Al hacerlo, el archivo se sobrescribirá con el original nuevamente.
Mi siguiente intento fue instalar el certificado de la tarjeta SD copiándolo y usando la opción correspondiente del menú de configuración. El dispositivo me dice que el certificado se ha instalado, pero aparentemente no confía en el certificado. Además, cuando intento copiar el almacén de claves en mi computadora, todavía encuentro el stock originalcacerts.bks
.
Entonces, ¿cuál es la forma correcta de instalar mi propio certificado de CA raíz en un dispositivo Android 2.2 como un certificado de confianza? ¿Hay alguna manera de hacerlo mediante programación?
fuente
Respuestas:
Antes de Android KitKat, debe rootear su dispositivo para instalar nuevos certificados.
Desde Android KitKat (4.0) hasta Nougat (7.0) es posible y fácil. Pude instalar el certificado Charles Web Debbuging Proxy en mi dispositivo no rooteado y detectar con éxito el tráfico SSL.
Extracto de http://wiki.cacert.org/FAQ/ImportRootCert
Desde Android N en adelante se vuelve un poco más difícil, vea este extracto del sitio web de proxy de Charles :
Agregue un archivo res / xml / network_security_config.xml a su aplicación:
Luego agregue una referencia a este archivo en el manifiesto de su aplicación, de la siguiente manera:
fuente
/system/etc/security/cacerts/*.0
) no se retienen después de reiniciar / reiniciar AVD, por lo que esta solución no tuvo éxito.debug-overrides
, ¿eso significa quenetwork_security_config
solo se trata de una variante de depuración? Si tengo otra variante como la variante UAT, ¿entonces esto no funcionará?Pasé mucho tiempo tratando de encontrar una respuesta a esto (necesito Android para ver los certificados StartSSL). Conclusión: Android 2.1 y 2.2 le permiten importar certificados, pero solo para usar con WiFi y VPN. No hay una interfaz de usuario para actualizar la lista de certificados raíz confiables, pero se está discutiendo sobre cómo agregar esa característica. No está claro si existe una solución confiable para actualizar y reemplazar manualmente el archivo cacerts.bks.
Detalles y enlaces: http://www.mcbsys.com/techblog/2010/12/android-certificates/ . En esa publicación, vea el enlace al error 11231 de Android: es posible que desee agregar su voto y consulta a ese error.
fuente
Si necesita su certificado para conexiones HTTPS, puede agregar el archivo .bks como recurso sin procesar a su aplicación y extender DefaultHttpConnection para que sus certificados se usen para conexiones HTTPS.
fuente
La guía vinculada aquí probablemente responderá la pregunta original sin la necesidad de programar un conector SSL personalizado.
Encontré una guía de instrucciones muy detallada sobre la importación de certificados raíz que realmente lo guía a través de la instalación de certificados de CA confiables en diferentes versiones de dispositivos Android (entre otros dispositivos).
Básicamente necesitarás:
Descargue: el archivo cacerts.bks de su teléfono.
adb pull /system/etc/security/cacerts.bks cacerts.bks
Descargue el archivo .crt de la autoridad de certificación que desea permitir.
Modifique el archivo cacerts.bks en su computadora usando el proveedor BouncyCastle
Vuelva a cargar el archivo cacerts.bks en su teléfono y reinicie.
Aquí hay un paso a paso más detallado para actualizar los teléfonos Android anteriores: Cómo actualizar el almacén de claves de la autoridad del certificado de seguridad HTTPS en un dispositivo anterior a Android-4.0
fuente
Hay una solución MUCHO más fácil para esto que la publicada aquí, o en hilos relacionados. Si está utilizando una vista web (como yo), puede lograr esto ejecutando una función JAVASCRIPT dentro de ella. Si no está utilizando una vista web, es posible que desee crear una oculta para este propósito. Aquí hay una función que funciona en casi cualquier navegador (o webview) para iniciar la instalación de ca (generalmente a través del repositorio compartido de certificados de os, incluso en un Droid). Utiliza un buen truco con iFrames. Simplemente pase la url a un archivo .crt a esta función:
ACTUALIZAR:
El truco del iframe funciona en Droids con API 19 y versiones posteriores, pero las versiones anteriores de la vista web no funcionarán así. Sin embargo, la idea general todavía funciona: solo descargue / abra el archivo con una vista web y luego deje que el sistema operativo se haga cargo. Esta puede ser una solución más fácil y más universal (en el Java real ahora):
Tenga en cuenta que instancia_ es una referencia a la Actividad. Esto funciona perfectamente si conoce la URL del certificado. En mi caso, sin embargo, lo resuelvo dinámicamente con el software del lado del servidor. Tuve que agregar una buena cantidad de código adicional para interceptar una URL de redireccionamiento y llamar a esto de una manera que no causó un bloqueo basado en una complicación de enhebrado, pero no agregaré toda esa confusión aquí ...
fuente
Lo que hice para poder usar los certificados startssl fue bastante fácil. (en mi teléfono rooteado)
Copié /system/etc/security/cacerts.bks en mi tarjeta sd
Http://www.startssl.com/certs/ca.crt y http://www.startssl.com/certs/sub.class1.server.ca.crt descargados
Fui a portecle.sourceforge.net y ejecuté portecle directamente desde la página web.
Abrí mi archivo cacerts.bks desde mi tarjeta sd (no ingresé nada cuando se me solicitó una contraseña)
Elija importar en portacle y abrir sub.class1.server.ca.crt, en mi caso, ya tenía el ca.crt, pero tal vez también necesite instalarlo.
Guarde el almacén de claves y lo copie baxck a /system/etc/security/cacerts.bks (hice una copia de seguridad de ese archivo primero por si acaso)
Reinicié mi teléfono y ahora puedo visitar mi sitio usando un certificado startssl sin errores.
fuente
Estos pasos me funcionaron:
Alternativamente, encontré estas opciones que no tenía necesidad de probar yo mismo, pero parecía fácil de seguir:
Finalmente, puede no ser relevante pero, si está buscando crear y configurar un certificado autofirmado (con mkcert) para su aplicación PWA (sitio web) alojado en un servidor web IIS local, seguí esta página:
https://medium.com/@aweber01/locally-trusted-development-certificates-with-mkcert-and-iis-e09410d92031
Gracias y espero que ayude !! :)
fuente
Aquí hay una solución alternativa que realmente agrega su certificado a la lista integrada de certificados predeterminados: Confiar en todos los certificados usando HttpClient sobre HTTPS
Sin embargo, solo funcionará para su aplicación. No hay forma de hacerlo programáticamente para todas las aplicaciones en el dispositivo de un usuario, ya que eso sería un riesgo de seguridad.
fuente
Si tiene un dispositivo rooteado, puede usar un módulo Magisk para mover los certificados de usuario al sistema, por lo que será un certificado de confianza
https://github.com/yochananmarqos/Move-Certificates
fuente