Instalación de certificado sin pantalla de bloqueo de PIN obligatoria

Soporte de Google dice :

El tipo de bloqueo aceptable puede estar predeterminado por el administrador del sistema.

¿Dónde puedo definir lo que es aceptable? Puedo regenerar el certificado si es necesario.

Entonces puedo usar la pantalla de bloqueo deslizante nuevamente.

(Estoy usando CM9 RC1, Android 4.0.4)

Aceptaré una solución que instale el certificado en el sistema directamente, evitando así el requisito del pin.
Para asegurar sus credenciales, es un requisito que use uno de los tipos de pantalla de bloqueo que tiene algún tipo de código secreto (patrón, PIN o contraseña). Lo que esa línea le dice es que su administrador puede (normalmente a través de una política de Exchange ActiveSync) bloquear su teléfono para que solo se acepten algunos tipos de ellos, por ejemplo, es posible que no confíen en los patrones de bloqueo y que piensen que los códigos de 4 dígitos Los PIN no tienen suficientes combinaciones. No significa que pueda desactivar este requisito de seguridad.
@GAThrawn Lo encuentro inaceptable si solo instalo una CA para autenticar mis servidores web a través de SSL (usando certificados autofirmados). Lo entendería si se tratara de firmar claves en el dispositivo o autenticar al usuario, pero ambos son al revés. Afortunadamente, la solución de Sgiebel parece funcionar para mí, con algunos ajustes menores que he descrito en los comentarios. El único inconveniente hasta ahora: requiere root.

Respuestas (6)

El problema de deshabilitar la seguridad de la pantalla de bloqueo usando el conmutador/perfil es que los widgets de la pantalla de bloqueo tampoco aparecen, por lo que no puede deslizar para desbloquear. Además, cuando reinicia su teléfono, los botones no funcionan hasta que vuelve a cambiar la configuración.

Otra forma es instalar el certificado como de costumbre y luego hacer una copia de seguridad de los directorios /data/misc/keychain y keystore usando algo que conserve las ACL, como Root Explorer, en una ubicación que admita ACL. Sugiero copiarlos en /tmp. Luego borre las credenciales de Configuración y habilite Deslizar para desbloquear. Luego copie las carpetas desde /tmp. Se instalará la CA.

Esto ya no funciona. Tan pronto como intente usar el certificado en algún lugar (como al conectarse a una red wifi), el sistema operativo requiere que configure un bloqueo en la pantalla nuevamente.
@CoryKlein Si hace clic en cancelar, se le pedirá un PIN y podrá ingresar el último que configuró. Es necesario para descifrar los datos.
@Kurian - Así que seguí las instrucciones anteriores, y cuando intento conectarme a una red wifi dice "Necesitas establecer un PIN de pantalla de bloqueo", hago clic en "Cancelar" y no sucede nada. Si presiono "Ok", luego cancelo desde allí, todavía no solicita el PIN.
@CoryKlein Leí mal tu comentario anterior. Estaba hablando de VPN. Al conectarse a una VPN, se le solicita el último PIN de la pantalla de bloqueo para descifrar sus credenciales. No sé si funciona para certificados personales con claves privadas. Sé que funciona para instalar certificados de CA de confianza. También podría ser la ROM específica que está utilizando. Las ROM AOSP anteriores a ICS nunca necesitaron un PIN de pantalla de bloqueo para guardar las credenciales de VPN.

He descrito cómo hacer exactamente esto en mi página, "Instalación de certificados CAcert en Android como credenciales de 'sistema' sin pantalla de bloqueo: instrucciones" en http://wiki.pcprobleemloos.nl/android/cacert

También lo publiqué en el foro de cyanogenmod: http://forum.cyanogenmod.com/topic/82875-installing-cacert-certificates-on-android-as-system-credentials-without-lockscreen/

Básicamente, los comandos son:

openssl x509 -inform PEM -subject_hash_old -in root.crt | head -1

Para obtener el nombre de archivo correcto, convierta el certificado:

cat root.crt > 5ed36f99.0
openssl x509 -inform PEM -text -in root.crt -out /dev/null >> 5ed36f99.0

Cópielos en /system/etc/security/cacerts/ y cambie los nuevos archivos .0 a '644'. Reinicie y verifique. En su dispositivo Android, seleccione 'Borrar certificados' y podrá eliminar el pin (ingresando el pin y cambiando su pantalla de bloqueo a 'ninguno' o 'borrar')

Aquí usé el certificado raíz CAcert, pero probablemente también desee el certificado class3.crt, o use sus propios certificados.

Usted menciona "certificados propios". Lo acabo de probar con mi "CA" (creada usando TinyCA), y en el último paso ("informar") solo sale un error: 140342119224992:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: TRUSTED CERTIFICATE. Verificando con No se puede cargar el certificado en openssl , el .pemarchivo debe coincidir. Pero entonces, tu última orden no cambia nada. ¿Algo mal, o se espera eso para una CA autofirmada/creada? Y antes de comenzar a piratear: ¿debería funcionar de todos modos?
Bien, funcionó y fue aceptado con mi propia TinyCA CA: openssl x509 -inform PEM -text -fingerprint -in cacert.pem > d6a2705a.0, luego moví el bloque base64 hacia arriba usando un editor de texto, colocando el archivo en /system/etc/security/cacerts/, ejecutándolo chown root:root d6a2705a.0y chmod 0644 d6a2705a.0desde dentro del directorio, et voila, aparece como un certificado de sistema confiable . ¡Yeehaa!
@sgiebels ¿Por casualidad también tiene una solución para usar las credenciales (de las credenciales del sistema u otras) en la conexión WLAN 802.1X? Parece que el almacén de claves/cadena de claves del dispositivo (/data/misc/key...) utiliza la contraseña para el cifrado, por lo tanto: cada vez que se necesitan las credenciales (conexión a WLAN), se solicita de nuevo el PIN/contraseña y ( en mi sistema) el bloqueo está activado de nuevo.
Esto funcionó bien, excepto que también tuve un problema con el formato del certificado debido a los finales de línea dos. dos2unix los convertirá, luego verificará que tenga el final correcto en la línea del certificado (el mío se veía así: -----END CERTIFICATE-----Certificate:lo que también causó un error de análisis).

Descubrí una solución que funciona sin software adicional o copia manual de archivos:

  1. Configure su pantalla de bloqueo en "patrón". Introduzca un patrón y un PIN de desbloqueo. Recuerde el PIN de desbloqueo.
  2. Instale su certificado de usuario.
  3. Apague y encienda la pantalla.
  4. Ingrese el patrón incorrectamente varias veces, hasta que aparezca "¿Olvidó el patrón?" aparece la opción.
  5. Haga clic en "¿Olvidó el patrón?", Desplácese hacia abajo, ingrese el PIN de desbloqueo y confirme con "Aceptar".
  6. Cierra la ventana "Configuración de desbloqueo de pantalla" con el botón Atrás sin seleccionar una opción .

El sistema ahora está configurado para "Desbloquear con deslizamiento", pero el certificado de usuario aún se puede usar (probado con el navegador web y una aplicación personalizada que usa DefaultHttpClient).

Probado en un Android 4.1.2 en un Galaxy Tab 2 10.1.

no funciona con wpa-enterprise/TLS en LG G2, los certificados desaparecieron después de esto
¡Este es un gran error! ¡Gracias! (funcionó perfectamente con Galaxy S5, android 6)

Solo quería agregar una respuesta que es una variante de guttermonk para un caso de uso particular: instalar un certificado en una instancia de Bluestacks. En este escrito, la aplicación de configuración para Bluestacks se ha modificado para que sea imposible establecer un pin o contraseña, y también es imposible agregar un certificado de usuario. Pero podemos obtener un certificado raíz en el sistema con el enfoque de guttermonk y algunos otros pasos. Pude instalar un certificado sin PIN ni contraseña y sin siquiera instalarlo en el almacén de certificados del usuario.

requisitos previos:

  • Privilegios de root en la instancia de Bluestacks
  • openssl (en el host, por ejemplo, como se proporciona con Git Bash)
  • Una aplicación de terminal en Bluestacks (por ejemplo, Termux)

En mi caso, descargué el archivo de certificado dentro de Bluestacks y no tenía Openssl disponible allí. Podemos copiar el archivo al directorio compartido con Windows :

cp /sdcard/Download/mycert.cer /sdcard/windows/BstSharedFolder

En Windows podemos usar el openssl para obtener el hash del certificado (supongo que eso es).

cd C:\ProgramData\BlueStacks\Engine\UserData\SharedFolder # in CMD
cd /c/ProgramData/BlueStacks/Engine/UserData/SharedFolder # in Bash

openssl x509 -inform PEM -subject_hash_old -in mycert.cer | head -1
# e.g. abcd1234

De vuelta en Android, podemos hacer que la partición del sistema sea escribible , copiar el certificado en el directorio de certificados del sistema y arreglar sus permisos y propiedad. Monte la partición del sistema de solo lectura después, por seguridad.

mount -o rw,remount /system

cd /system/etc/security/cacerts/
cp /sdcard/Download/mycert.cer ./abcd1234.0
chmod 644 abcd1234.0
chown system:system abcd1234.0

mount -o ro,remount /system
  • Puedes hacer uso de los perfiles de CyanogenMod .
    (Para otros lectores: esto necesita la versión personalizada de CyanogenMod Rom 9+)

    Simplemente cree o modifique un perfil existente y desactive el "bloqueo de pantalla" allí.

    Es: Configuración del sistema->Perfiles->Predeterminado->Modo de pantalla de bloqueo->Deshabilitado

  • Integre su certificado en el archivo de almacén de claves estándar de Android

    Vea el excelente tutorial de CAcert aquí

    Sin embargo, no estoy seguro de si puede hacer esto con un certificado autofirmado (quizás tenga que cambiar a una CA hecha por usted mismo (use tinyca para una buena herramienta de interfaz gráfica de usuario en * nix)).

Esto no funciona (ya). Tan pronto como haya instalado los certificados (p. ej., los de cacert.org), esta opción/elemento del perfil aparecerá atenuado.

Encontré una manera de resolver el problema, pero requiere root y es posible que solo funcione con CA raíz, autofirmadas o intermedias.

Si tiene un certificado en el que Android no confía, cuando lo agrega, va al almacén de certificados personales. Cuando agrega un certificado en este almacén de certificados personales, el sistema requiere un nivel de seguridad más alto para desbloquear el dispositivo. Pero si logra agregar su certificado al almacén del sistema, entonces no tiene este requisito. Obviamente, se requiere root para agregar un certificado al almacén del sistema, pero es bastante fácil.

Aquí está cómo hacerlo:

1 - Agregue su certificado normalmente. Por ejemplo, mi certificado se llamó some.crt. Se almacenará en su tienda personal y Android le pedirá un pin/contraseña... Continúe.

2 - Con un administrador de archivos con capacidades de raíz, busque archivos en formato /data/misc/keychain/cacerts-addedo /data/misc/keystore. Debería ver un archivo aquí llamado 1000_USRCERT_somees el certificado que agregó en el paso 1.

3 - Mueva este archivo a system/etc/security/cacerts (necesitará montar la partición del sistema r/w)

4 - Reiniciar el teléfono

5 - Ahora puede borrar el pin/contraseña que configuró para desbloquear el dispositivo.

Trabajó para mí con un certificado autofirmado en Android 4.4.2. ¡Espero eso ayude!

Interesante, que no mencionaste la fuente original , ni acreditaste apropiadamente al autor. Siga Cómo hacer referencia al material escrito por otros .