¿Alguien con iOS 9 beta 1 ha tenido este problema?
Utilizo NSURLConnection estándar para conectarme a un servicio web y tan pronto como se realiza una llamada al servicio web, aparece el siguiente error. Esto funciona actualmente en iOS 8.3
Posible error beta? cualquier idea o pensamiento sería genial! Sé que es muy temprano en el desarrollo de iOS 9
Aquí está el error completo:
CFNetwork SSLHandshake falló (-9824) NSURLSession / NSURLConnection Error de carga HTTP (kCFStreamErrorDomainSSL, -9824)
NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://mywebserviceurl"]];
NSURLResponse * response = nil;
NSError * error = nil;
NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];
fuente
En iOS 10+, la cadena TLS DEBE tener la forma "TLSv1.0". No puede ser solo "1.0". (Suspiro)
La siguiente combinación de las otras respuestas funciona.
Digamos que está intentando conectarse a un host (YOUR_HOST.COM) que solo tiene TLS 1.0.
Agréguelos a la lista de información de su aplicación
fuente
NSTemporaryExceptionRequiresForwardSecrecy
sirvió, ¡gracias!Para obtener más información Configuración de excepciones de seguridad de transporte de aplicaciones en iOS 9 y OSX 10.11
Este envío de una aplicación con App Transport Security cubre algunos buenos consejos de depuración
Falla ATS
CFNETWORK_DIAGNOSTICS
nscurl
fuente
Si su backend usa una conexión segura y se obtiene usando NSURLSession
debe verificar la configuración de su servidor, especialmente para obtener la versión ATS y la información del certificado SSL:
En lugar de simplemente Permitir una conexión insegura mediante la configuración
NSExceptionAllowsInsecureHTTPLoads = YES
, en su lugar, debe Permitir seguridad reducida en caso de que su servidor no cumpla con el requisito mínimo (v1.2) para ATS (o mejor para arreglar el lado del servidor).Permitir seguridad reducida a un único servidor
use el cliente openssl para investigar el certificado y obtenga la configuración de su servidor usando el cliente openssl:
..encuentra al final
App Transport Security (ATS) requiere la versión 1.2 del protocolo Transport Layer Security (TLS).
Requisitos para conectarse usando ATS:
Actualización: resulta que openssl solo proporciona la versión mínima del protocolo Protocolo: enlaces TLSv1
fuente
Después de dos días de intentos y fracasos, lo que funcionó para mí es este código de womble
Con un cambio, de acuerdo con esta publicación , deberíamos dejar de usar subclaves asociadas con el diccionario NSExceptionDomains de ese tipo de Convención
Y usar en la nueva Convención
en lugar.
documentación de apple
mi código
fuente
Otra herramienta útil es nmap (brew install nmap)
Da salida
fuente
Este error aparecía en los registros a veces cuando estaba usando una versión iOS de Cordova con errores. Se fue cuando actualicé o degradé cordova iOS.
El servidor al que me estaba conectando estaba usando SSL TLSv1.2, así que sabía que ese no era el problema.
fuente
En su
.plist
archivo de proyecto , agregue este permiso:fuente
La sintaxis para la configuración de Info.plist
fuente
Respuesta actualizada (post-WWDC 2016):
App Transport Security, o ATS, es una característica que Apple introdujo en iOS 9. Cuando ATS está habilitado, obliga a una aplicación a conectarse a servicios web a través de una conexión HTTPS en lugar de HTTP no seguro.
Sin embargo, los desarrolladores aún pueden desactivar ATS y permitir que sus aplicaciones envíen datos a través de una conexión HTTP como se menciona en las respuestas anteriores. A finales de 2016, Apple hará que ATS sea obligatorio para todos los desarrolladores que esperan enviar sus aplicaciones a la App Store. enlace
fuente
El dispositivo que probé tenía un tiempo incorrecto configurado. Entonces, cuando intenté acceder a una página con un certificado que se agotaría pronto, negaría el acceso porque el dispositivo había expirado. Para solucionarlo, configure el tiempo adecuado en el dispositivo.
fuente