nsapptransportsecurity - kCFStreamErrorDomainSSL,-9802 cuando se conecta a un servidor por dirección IP a través de HTTPS en iOS 9
support http ios (5)
Encontré otra respuesta de desbordamiento de pila con una lista de verificación de los nuevos requisitos exactos en el servidor para completar por completo los requisitos de seguridad de transporte de aplicaciones predeterminados de iOS 9: Lista de verificación de requisitos del servidor de seguridad iOS 9
Espero que ayude.
Tenemos una aplicación para iOS que se conecta a nuestro servidor a través de HTTPS. Cuando la aplicación se compila con el nuevo SDK de iOS 9 y se ejecuta con iOS 9, se produce el siguiente error:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
La aplicación utiliza AFNetworking 1.3.4 con certs anclados. El problema ocurre si me conecto al servidor con su dirección IP. Funciona si agrego la configuración NSAllowsArbitraryLoads , o si me conecto al servidor con su nombre de dominio.
El conector Tomcat está configurado con sslEnabledProtocols = "TLSv1, TLSv1.1, TLSv1.2".
He intentado anular el nombre del host, pero parece que no cambia nada.
Todavía no puedo encontrar mucha documentación oficial sobre ATS. ¿Quizás no se supone que la conexión con la dirección IP funcione?
Me quedé atrapado en este por un tiempo e intenté todos los trucos en Info.plist pero aún tuve el error:
HTTP load failed (kCFStreamErrorDomainSSL, -9813)
al intentar conectarse a un servidor localhost en desarrollo.
Desarrollando localmente con un proyecto nativo de reacción conectado a una API servida con un certificado autofirmado, tenía mi sistema configurado para confiar en el certificado, pero me tomó un tiempo darme cuenta de que también necesitaba el simulador IOS para aceptar mi certificado como confiable para pasar. este error.
En la pantalla de inicio de su simulador, debería poder arrastrar el archivo cert al simulador para solicitarle que agregue el perfil del certificado. O, si se puede acceder al certificado a través de una url localhost en el navegador de safari del simulador, puede aceptarlo a través de safari.
¡Espero que esto ayude a alguien mientras daba vueltas antes de hacer clic para mí!
Puede agregar esto en su archivo " Info.plist ", permitirá conexiones no seguras:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
iOS9 requiere que el servidor solo admita TLSv1.2 y que admita una seguridad directa perfecta.
También se requiere que la aplicación sea compatible con IPV6, incluido el no uso de direcciones IP codificadas.
Sugerido es usar
NSURLSession
.
De lo contrario, se deben hacer excepciones en la lista de aplicaciones.
Consulte la sesión WWDC-15 "Seguridad y sus aplicaciones".
También vea NSAllowsArbitraryLoads para más detalles.
Solución 1:
Si está buscando
work around
, utilice el siguiente enfoque:
- Agregue la clave NSAllowsArbitraryLoads de tipo booleano con valor verdadero .
Su archivo Info.plist debería verse así:
Sin embargo, este enfoque no se recomienda ya que permite todas las conexiones no seguras.
Solución 2:
El
SSL certificate that you apply on Server should be of type TLSv2.0 minimum since iOS 10 requires this.
Consulte este
link
para más detalles.
- Agregue la clave NSIncludesSubdomains de tipo boolean con valor true
- Agregue la clave NSTemporaryExceptionAllowsInsecureHTTPLoads de tipo boolean con valor true
- Agregue la clave NSTemporaryExceptionMinimumTLSVersion de tipo String con valor TLSv1.2
Su archivo Info.plist debería verse así: