Estoy intentando instalar el certificado autofirmado para mi servidor web en Android 4.3. Tengo el archivo .crt en la raíz de la tarjeta SD (que en realidad se emula porque no tengo una tarjeta SD en la ranura).
Para instalar el certificado, voy a Configuración -> General -> Seguridad -> Almacenamiento de credenciales -> Instalar desde el almacenamiento del dispositivo.
Aparece un cuadro de diálogo que muestra el nombre del certificado (el nombre de archivo menos la extensión .crt) que puedo modificar (pero no lo hago), un menú desplegable "usado para" con "VPN y aplicaciones" seleccionado y texto en la parte inferior del cuadro de diálogo que informa "El paquete contiene: un certificado de usuario". Todo se ve bien, así que hago clic en "Aceptar". El cuadro de diálogo desaparece y aparece un mensaje emergente con "[nombre] instalado".
Sin embargo, si voy inmediatamente a "Credenciales de confianza y selecciono "Usuario", ¡no hay nada allí! El nuevo certificado tampoco está en "Sistema", pero no lo esperaría allí. Si voy a un navegador después de esto e intento ir a mi sitio web, sigo recibiendo la advertencia de que el certificado del sitio no es de confianza. También he intentado reiniciar, pero no hace ninguna diferencia.
¿Qué estoy haciendo mal? La falta total de mensajes de error no es útil. ¿Es posible que mi certificado esté en un formato incorrecto? He intentado usar el archivo .crt en el directorio ssl del servidor y he intentado convertirlo al formato DER.
Actualización: leí en alguna parte que Android requiere que los certificados estén en formato p12, así que convertí el certificado Apache2 a p12 usando el siguiente comando:
openssl pkcs12 -export -inkey server.key -in server.crt -out ~/server.p12
Luego repetí los pasos anteriores, obtuve el mismo mensaje de éxito y luego procedí a no ver el certificado en las credenciales de usuario y sigo recibiendo el error de certificado no confiable del navegador móvil.
Tuve el mismo problema para que Android realmente instalara el certificado, hasta que encontré este sitio que describe un método que funcionó para mí. Se reduce a los siguientes pasos:
Cree una clave privada y un certificado x509 público con extensiones v3_req y habilitado como CA:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/my_site.key -out /etc/ssl/certs/my_site.crt -reqexts v3_req -extensions v3_ca
Convierta el certificado al formato DER, que es entendido por Android:
sudo openssl x509 -in /etc/ssl/certs/my_site.crt -outform der -out my_site.der.crt
Use cualquier método para obtener el my_site.der.crt
archivo en su dispositivo Android: me resultó fácil tener el archivo alojado en mi servidor web y descargarlo a través del navegador de Android, que luego le permite instalarlo automáticamente.
Aunque me hubiera gustado dividir el paso 1 en dos (1a. generación de clave privada y 1b. generación de certificado público), no invertí mucho tiempo investigando cómo hacerlo. Por favor, hágamelo saber en un comentario si encontró una manera que funcione, gracias.
(En lugar de agregar un comentario, siento que esto realmente pertenece como parte de la respuesta para referencia futura, así que lo estoy editando. --Michael)
En lugar de crear un certificado habilitado como CA, creé una CA autofirmada y luego volví a firmar mi clave/csr existente con la nueva CA. Luego agregué la CA autofirmada a Android y ¡listo! ¡Funcionó!
Generación de la CA autofirmada:
openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -nodes -key rootCA.key -days 3650 -out rootCA.pem
Volver a firmar un CSR existente que tenía desde la creación de la clave desde el
openssl x509 -req -in existing.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out existing.crt -days 3649
Ahora, usando una forma modificada de su segundo comando, convertí el certificado CA en forma DER:
openssl x509 -in /etc/apache2/ssl/rootCA.pem -outform der -out ~/rootCA.der.crt
Lo mejor de esto es que cualquier certificado adicional que no sea de confianza que ahora se vuelva a firmar con la nueva CA autofirmada ahora será confiable en cualquier dispositivo que tenga instalada la nueva CA sin necesidad de instalar nada más. Esto no resuelve exactamente el problema de confiar en sitios sobre los que no tiene control, pero podría facilitarlo si tiene alguna influencia sobre (digamos) su departamento de TI para un servidor interno o algo así.
Miguel
Miguel
Miguel
AmigoFX
Miguel
AmigoFX
cguenther
wie5Ooma
AmigoFX
wie5Ooma
AmigoFX
wie5Ooma
atripes
-reqexts v3_req -extensions v3_ca
finalmente funcionó. Al menos 6 horas. Lo juro. ¡¡Gracias!!scottyb