Seguridad de TLS
iOS, iPadOS y macOS son compatibles con la seguridad de la capa de transporte (TLS 1.0, TLS 1.1, TLS 1.2 y TLS 1.3) y con Datagram Transport Layer Security (DTLS). El protocolo TLS es compatible con AES128 y AES256, y prefiere conjuntos de cifrado con confidencialidad directa. Las apps de internet, como Safari, Calendario y Mail, usarán automáticamente este protocolo para permitir un canal de comunicación encriptado entre el dispositivo y los servicios de red. Las API de alto nivel (como CFNetwork) facilitan a los desarrolladores la adopción de TLS en sus apps, mientras que las API de bajo nivel (como Network.framework) proporcionan un control muy preciso. CFNetwork no permite SSL 3 y las apps que utilizan WebKit (como Safari) tienen prohibido realizar una conexión SSL 3.
En iOS 11 o posterior, y macOS 10.13 o posterior, ya no se permiten los certificados SHA-1 para las conexiones TLS, a no ser que el usuario indique que son de confianza. Tampoco se permiten los certificados con claves RSA que tengan una longitud inferior a 2048 bits. En iOS 10 y macOS 10.12 ya no se usa el conjunto de cifrado simétrico RC4. Por defecto, los clientes o servidores TLS implementados con las API SecureTransport no disponen de conjuntos de cifrado simétrico RC4 y no pueden conectarse cuando el único conjunto de cifrado disponible es RC4. Si quieres aumentar la seguridad, los servicios o apps que requieren RC4 deberían actualizarse para usar conjuntos de cifrado seguros. En iOS 12.1, los certificados emitidos después del 15 de octubre de 2018 desde un certificado raíz de confianza del sistema deben registrarse en un registro de transparencia de certificados de confianza para que se permitan para las conexiones TLS. En iOS 12.2, las API Network.framework y NSURLSession tienen TLS 1.3 activado por defecto. Sin embargo, los clientes TLS que utilicen las API SecureTransport no pueden usar TLS 1.3.
Seguridad de transporte de las apps
La seguridad de transporte de las apps proporciona unos requisitos de conexión por defecto, de manera que las apps cumplan las buenas prácticas para conexiones seguras al utilizar las API NSURLConnection, CFURL o NSURLSession. Por defecto, la seguridad de transporte de las apps limita la selección de cifrados para incluir solo conjuntos que proporcionen la confidencialidad directa, concretamente:
ECDHE_ECDSA_AES y ECDHE_RSA_AES en modo Galois/Counter (GCM)
Modo de encadenamiento de bloques de cifrado (CBC)
Las apps pueden desactivar el requisito de confidencialidad directa por dominio, en cuyo caso se añade RSA_AES al conjunto de cifrados disponibles.
Los servidores deben ser compatibles con TLS 1.2 y con la confidencialidad directa, y los certificados deben ser válidos y estar firmados mediante SHA256 o algo más seguro, con un mínimo de una clave RSA de 2048 bits o una clave de curva elíptica de 256 bits.
Las conexiones de red que no cumplan estos requisitos darán error, a menos que la app omita la seguridad de transporte de las apps. Los certificados no válidos siempre dan como resultado un fallo grave e imposibilidad de conexión. La seguridad de transporte de las apps se aplica automáticamente a las apps compiladas para iOS 9 o posterior y macOS 10.11 o posterior.
Comprobación de la validez del certificado
La evaluación del estado de confianza de un certificado TLS se lleva a cabo de acuerdo con los estándares establecidos del sector, como se establece en RFC 5280, e incorpora estándares emergentes como el RFC 6962 (transparencia de certificados). En iOS 11 o posterior y macOS 10.13 o posterior, los dispositivos Apple se actualizan de forma periódica con una lista actual de los certificados revocados y restringidos. La lista está compuesta por las listas de revocación de certificados (CRL, por sus siglas en inglés) que publican cada una de las autoridades de certificación básica integradas en las que confía Apple, además de los emisores secundarios de dichas autoridades de certificación. Apple, a su discreción, puede incluir otras limitaciones a la lista. Esta información se consulta cada vez que se usa una función API de red para establecer una conexión segura. Si hay demasiados certificados revocados de una autoridad de certificación como para enumerarlos individualmente, una evaluación de confianza puede requerir que se necesite una respuesta del estado del certificado en línea (OCSP, por sus siglas en inglés); si la respuesta no está disponible, la evaluación de confianza dará un error.