14 votos

¿Por qué iOS 13 no confía en mi propia CA root?

Haga lo que haga, no consigo que Safari en el iPhone o el iPad confíe en un certificado de un sitio web interno. Puedo mirar el certificado y aparece como "no fiable".

He importado la CA root, y he activado la confianza para la CA root. Esto funcionaba antes con iOS 12, pero ya no parece ser suficiente.

La herramienta "SSL Detective" muestra una cadena de certificados de confianza. Safari en el Mac no tiene problemas con el sitio web / certificado (por supuesto, la CA root tuvo que ser importada al llavero primero).

¿Es un error de iOS 13.1.1? O hay aún más obstáculos que desconozco para habilitar una CA interna?

20voto

Jose Chavez Puntos 645

En iOS 13 se ha aumentado la seguridad respecto a estos certificados Root. Por lo tanto, no se trata de un error, sino que hay que cumplir con mayores requisitos para que esto funcione.

En primer lugar, el proceso para confiar manualmente en el certificado root se ha hecho ligeramente más complicado para garantizar que los usuarios no lo hagan involuntariamente. Antes podías importar un perfil y listo, pero ahora tienes que abrir también Configuración > General > Acerca de > Configuración de la confianza de los certificados, y luego activar "Habilitar la confianza total para los certificados root" para el certificado.

Además del cambio de proceso mencionado, también han cambiado los requisitos para el certificado real:

  • Si utiliza RSA, el tamaño de la clave debe ser de al menos 2048 bites.

  • El algoritmo hash debe ser SHA-2, y no SHA-1.

Puede leer la explicación de Apple al respecto nuevos requisitos aquí . Tenga en cuenta que la mayoría de los requisitos son sólo para los "certificados de servidor"; sólo tiene que cumplir los nuevos requisitos para las "CA emisoras".

Según tus comentarios, parece que el título de tu pregunta era realmente incorrecto y no era la confianza de la "CA root" con la que tenías problemas - era el certificado del servidor el que no era de confianza. En este caso, recuerde que el certificado del servidor debe seguir todos los nuevos requisitos enumerados en el enlace mencionado anteriormente.

Estos nuevos requisitos son, para todos los certificados de servidor:

  • Cuando se utiliza para TLS (como se hace en Safari), el nombre DNS del servidor debe estar en el campo Subject Alternative Name

Tenga en cuenta que este requisito también significa que si está solicitando su página web utilizando una dirección IP en lugar de un nombre, entonces la dirección IP (sin número de puerto) debe aparecer en el campo SAN.

Y para los certificados de servidor emitidos después del 1 de julio de 2019, también los dos requisitos siguientes:

  • Si se utiliza para TLS, el certificado debe contener un campo ExtendedKeyUsage con el OID id-kp-serverAuth (es decir, no utilice un certificado que figure como certificado de cliente, certificado de firma de código, certificado de correo electrónico o VPN, etc.)

  • Cuando se utiliza para TLS, el certificado debe ser válido durante 825 días o menos

Resulta que su problema era que el periodo de validez del certificado era superior a 825 días. Tendrás que volver a emitir el certificado con un periodo de validez más corto.

El motivo del nuevo requisito de periodo de validez es que el foro mundial de CA/B (regula la industria de los certificados digitales) estableció nuevas directrices en las que las CA no deben emitir certificados de servidor con un periodo de validez de más de 825 días después del 1 de marzo de 2018. Para más información sobre quién está detrás de la nueva norma, puede encontrar la información de la votación aquí .

0 votos

Gracias por el enlace. El único requisito del que no estoy seguro es "Los certificados de servidor TLS deben contener una extensión ExtendedKeyUsage (EKU) que contenga el OID id-kp-serverAuth". No entiendo qué significa esto, así que es probable que no lo haya hecho correctamente. Todo lo demás lo hice de acuerdo a la guía. Sí habilité la confianza: Esto también era necesario con iOS 12.

1 votos

Ah, vuelve a leer el enlace: El certificado (el del servidor, no el Root o el intermedio) es simplemente válido por demasiado tiempo. Lo hice para 10 años, pero sólo puede ser válido para dos años o menos. Debe ser esto.

0 votos

El OID id-kp-serverAuth significa que cuando se hace el certificado, se escribe en ExtendedKeyUsage para qué es el certificado. Es decir, puede marcarse como certificado de cliente, certificado de firma de código, certificado de correo electrónico, certificado de VPN, etc. Es necesario que esté marcado como certificado de servidor para que sea aceptado por ejemplo por Safari para TLS.

6voto

user363287 Puntos 29

Yo mismo estoy trabajando en esto desde hace días. 2 fines de semana enteros sin suerte. Así que ahora mismo intento volver a tener fe. (para conseguir que iOS 13 y iPadOS acepten un certificado descendiente de un Root-ca autofirmado)

Mi conclusión después de perder 2 fines de semana completos era correcta. El árbol pki y los certificados eran correctos.

La razón principal por la que no se aceptaron los certificados en iOS fue porque Apple decidió añadir una opción de seguridad adicional en un área completamente diferente. ( Estoy cabreado con Apple en mis más de 10 años usando dispositivos Apple ). Eso es algo que esperaría de Win10 y no de iOS13 y iPadOS.

Para otros que están atascados con esto.

  • Paso1) Sube tu Root-ca a tu dispositivo iOS/iPadOS (por Airdrop, email, ...)
  • Paso 2) Airdrop pide la instalación, si no, abre en Files-App
  • Paso 3) Vaya a Ajustes > General > Perfiles e instale el certificado propuesto e introduzca su código de acceso (aún no ha terminado)
  • Paso 4) Vaya a Ajustes > Información > "Ajustes del certificado".
  • Paso5) activar el certificado abierto

Los nuevos menús divididos son un poco molestos y no son realmente intuitivos. Eso es todo.

-1voto

aventurin Puntos 101

En iOS 13, que había sido lanzado el 19 de septiembre de 2019, Apple ha optado por invalidar retroactivamente ciertos certificados que han sido emitidos después de 1 de julio de 2019 .

En particular, un certificado se ve afectado si tiene un periodo de validez de más de 825 días.

Si tienes un certificado de este tipo, dejará de funcionar tras la actualización a iOS 13.

En este caso yo lo llamaría un error de iOS 13.

0 votos

¿Tu respuesta es sólo una copia de parte de la información de mi respuesta anterior? - Tu opinión acerca de que esto es un bug y de destacar que es "retroactivo" es realmente extraña. No es un error - es completamente intencional, y no es sólo una decisión arbitraria que Apple hizo. Es un cambio en toda la industria.

0 votos

¿Puede indicar la afirmación de que se trata de un cambio en todo el sector? No he encontrado ninguno. Además, los sistemas operativos Android y de escritorio no parecen mostrar el mismo comportamiento. Probablemente porque tiene graves implicaciones en las redes privadas.

0 votos

He complementado mi respuesta con la explicación de por qué es un cambio en toda la industria. Básicamente, las CA ordinarias ya no pueden emitir certificados con un periodo de validez superior a 825 días. Las CAs privadas utilizadas en redes internas no están, por supuesto, sujetas a estas nuevas reglas - pero las reglas han sido cambiadas por una razón, así que tiene sentido que Apple (y eventualmente otros) implementen la misma restricción. En cuanto a los sistemas operativos de escritorio, el mismo requisito está en MacOS Catalina.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X