ios afnetworking nsurlsession ios9 tls1.2

NSURLSession/NSURLConnection La carga HTTP falló en iOS 9



afnetworking ios9 (13)

Intenté ejecutar mi aplicación existente en iOS9 pero recibí un error al usar AFURLSessionManager .

__block NSURLSessionDataTask *task = [self.sessionManager dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { if (error) { } else { } }]; [task resume];

Obtuve el siguiente error:

Error Domain=NSURLErrorDomain Code=-999 "cancelled.

También obteniendo los siguientes registros:

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824 CFNetwork SSLHandshake failed (-9824)

Actualización: He agregado varias actualizaciones a mi solución: NSURLSession / NSURLConnection La carga HTTP falló en iOS 9


Actualizar:

A partir de Xcode 7.1, no necesita ingresar manualmente el Diccionario NSAppTransportSecurity en info.plist .

Ahora se completará automáticamente para usted, se dará cuenta de que es un diccionario y luego también completará automáticamente las cargas Allows Arbitrary permitidas. captura de pantalla de info.plist


Además de las respuestas mencionadas anteriormente, vuelva a verificar su URL


Cómo lidiar con SSL en iOS9, una solución es hacer lo siguiente:

Como dice la Apple :

iOS 9 y OSX 10.11 requieren SSL TLSv1.2 para todos los hosts de los que planea solicitar datos, a menos que especifique dominios de excepción en el archivo Info.plist de su aplicación.

La sintaxis para la configuración de Info.plist se ve así:

<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>yourserver.com</key> <dict> <!--Include to allow subdomains--> <key>NSIncludesSubdomains</key> <true/> <!--Include to allow insecure HTTP requests--> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <!--Include to specify minimum TLS version--> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict> </dict> </dict>

Si su aplicación (un navegador web de terceros, por ejemplo) necesita conectarse a hosts arbitrarios, puede configurarla así:

<key>NSAppTransportSecurity</key> <dict> <!--Connect to anything (this is probably BAD)--> <key>NSAllowsArbitraryLoads</key> <true/> </dict>

Si tiene que hacer esto, probablemente sea mejor actualizar sus servidores para usar TLSv1.2 y SSL, si aún no lo están haciendo. Esto debe considerarse una solución temporal.

A partir de hoy, la documentación preliminar no menciona ninguna de estas opciones de configuración de manera específica. Una vez que lo haga, actualizaré la respuesta para vincular a la documentación relevante.

Para obtener más información, vaya a iOS9AdaptationTips


Debe agregar App Transport Security Settings a info.plist y agregar Allow Arbitrary Loads a App Transport Security Settings

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>


Encontré una solución desde http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/ Y está funcionando para mí.

Mira esto, puede ayudarte.

<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>myDomain.com</key> <dict> <!--Include to allow subdomains--> <key>NSIncludesSubdomains</key> <true/> <!--Include to allow HTTP requests--> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <!--Include to specify minimum TLS version--> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict> </dict> </dict>


Esto es lo que funcionó para mí cuando tuve este error:

<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>example.com</key> <dict> <key>NSExceptionRequiresForwardSecrecy</key> <false/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> </dict> </dict> </dict>


Lo resolví agregando algunas claves en info.plist. Los pasos que seguí son:

Abrí el archivo info.plist de mi proyecto

Se agregó una clave llamada NSAppTransportSecurity como diccionario.

Se agregó una subclave llamada NSAllowsArbitraryLoads como booleana y estableció su valor en SÍ como en la siguiente imagen. ingrese la descripción de la imagen aquí

Limpia el proyecto y ahora todo funciona bien como antes.

Enlace de referencia: https://.com/a/32609970


Puede intentar agregar esta función en el archivo RCTHTTPRequestHandler.m

- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler { completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]); }


Si tiene este problema con Amazon S3 como yo, intente pegar esto en su info.plist como hijo directo de su etiqueta de nivel superior

<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>amazonaws.com</key> <dict> <key>NSThirdPartyExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> <key>NSIncludesSubdomains</key> <true/> </dict> <key>amazonaws.com.cn</key> <dict> <key>NSThirdPartyExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> <key>NSIncludesSubdomains</key> <true/> </dict> </dict> </dict>

Puedes encontrar más información en:

http://docs.aws.amazon.com/mobile/sdkforios/developerguide/ats.html#resolving-the-issue


Simplemente agregue los siguientes campos en su archivo .plist

La sintaxis se ve así:

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>


Solución encontrada:

En iOS9, ATS aplica las mejores prácticas durante las llamadas de red, incluido el uso de HTTPS.

De la documentación de Apple:

ATS evita la divulgación accidental, proporciona un comportamiento predeterminado seguro y es fácil de adoptar. Debe adoptar ATS lo antes posible, independientemente de si está creando una nueva aplicación o actualizando una existente. Si está desarrollando una nueva aplicación, debe usar HTTPS exclusivamente. Si tiene una aplicación existente, debe usar HTTPS tanto como pueda en este momento y crear un plan para migrar el resto de su aplicación lo antes posible.

En la versión beta 1, actualmente no hay forma de definir esto en info.plist. La solución es agregarlo manualmente:

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>

Actualización 1: Esta es una solución temporal hasta que esté listo para adoptar el soporte ATS iOS9.

Actualización2: para obtener más detalles, consulte el siguiente enlace: http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/

Actualización 3: si está intentando conectarse a un host (YOURHOST.COM) que solo tiene TLS 1.0

Agréguelos a la lista de información de su aplicación

<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>YOURHOST.COM</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>1.0</string> <key>NSTemporaryExceptionRequiresForwardSecrecy</key> <false/> </dict> </dict> </dict>


Solucione el error fallido de carga de NSURLConnection Http Solo agregue el siguiente Dict en info.plist:

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> <key>NSAllowsArbitraryLoadsInWebContent</key> <true/> </dict>


La nota técnica de Apple sobre seguridad en el transporte de aplicaciones es muy útil ; nos ayudó a encontrar una solución más segura para nuestro problema.

Esperemos que esto ayude a alguien más. Estábamos teniendo problemas para conectarnos a las URL de Amazon S3 que parecían ser perfectamente válidas, las URL TLSv12 HTTPS. Resulta que tuvimos que deshabilitar NSExceptionRequiresForwardSecrecy para habilitar otro puñado de cifrados que usa S3.

En nuestra Info.plist :

<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>amazonaws.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSExceptionRequiresForwardSecrecy</key> <false/> </dict> </dict> </dict>