¿Cómo cargo una URL HTTP con App Transport Security habilitada en iOS 9? [duplicar]
Entonces, el nuevo SDK beta de iOS lanzado anoche tiene "App Transport Security" que anima a los desarrolladores a utilizar https en lugar de http. En principio, esta es una gran idea y ya uso https en nuestros entornos de ensayo/producción. Sin embargo, no tengo https configurado en mi entorno de desarrollo local cuando la aplicación de iOS se conecta a un servicio web que estoy ejecutando en mi computadora portátil.
Después de jugar un poco esta mañana, parece que el sistema de carga de URL, incluso si le entrega una URL http, decidirá usar https en su lugar. ¿Alguien sabe cómo deshabilitar este comportamiento, incluso solo para URL específicas?
Consulte la referencia Info.plist de Apple para obtener todos los detalles (gracias @gnasher729).
Puede agregar excepciones para dominios específicos en su Info.plist:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>testdomain.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<false/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSRequiresCertificateTransparency</key>
<false/>
</dict>
</dict>
</dict>
Todas las claves para cada dominio exceptuado son opcionales. El orador no dio más detalles sobre ninguna de las claves, pero creo que todas son razonablemente obvias.
(Fuente: sesión 703 de la WWDC 2015, “Privacidad y su aplicación” , 30:18)
También puedes ignorar todas las restricciones de seguridad del transporte de aplicaciones con una sola clave, si tu aplicación tiene una buena razón para hacerlo:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Si su aplicación no tiene una buena razón, puede correr el riesgo de ser rechazada:
Configurar NSAllowsArbitraryLoads en verdadero permitirá que funcione, pero Apple fue muy claro en que tienen la intención de rechazar las aplicaciones que usan este indicador sin un motivo específico. La razón principal que se me ocurre para usar NSAllowsArbitraryLoads sería el contenido creado por el usuario (compartir enlaces, navegador web personalizado, etc.). Y en este caso, Apple todavía espera que incluyas excepciones que apliquen el ATS para las URL que tienes bajo control.
Si necesita acceso a URL específicas que no se ofrecen a través de TLS 1.2, debe escribir excepciones específicas para esos dominios, no usar NSAllowsArbitraryLoads configurado en yes. Puede encontrar más información en la sesión NSURLSesssion WWDC.
Tenga cuidado al compartir la solución NSAllowsArbitraryLoads. No es la solución recomendada por Apple.
— kcharwood (gracias @marco-tolman)
Como respuesta aceptada, se proporcionó la información requerida y, para obtener más información sobre el uso y la desactivación de App Transport Security, puede encontrar más información al respecto .
Para excepciones por dominio, agréguelas a Info.plist :
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>yourserver.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>
Pero ¿qué pasa si no conozco todos los dominios inseguros que necesito utilizar? Utilice la siguiente clave en su Info.plist
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections (DANGER)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Para obtener más detalles, puede obtenerlos desde este enlace.
Segui esto .
Lo resolví agregando alguna clave en info.plist. Los pasos que seguí son:
Abrí mi
info.plist
archivo de ProyectosSe agregó una clave
NSAppTransportSecurity
llamadaDictionary
.- Se agregó una subclave llamada
NSAllowsArbitraryLoads
asBoolean
y se estableció su valorYES
como en la siguiente imagen.
Limpie el proyecto y ahora todo funcionará bien como antes.
Enlace de referencia .
Si solo desea deshabilitar la Política de transporte de aplicaciones para servidores de desarrollo locales, las siguientes soluciones funcionan bien. Es útil cuando no es posible o resulta poco práctico configurar HTTPS (por ejemplo, cuando se utiliza el servidor de desarrollo de Google App Engine).
Sin embargo, como han dicho otros, ATP definitivamente no debería desactivarse para aplicaciones de producción.
1) Utilice un plist diferente para depurar
Copie su archivo Plist y NSAllowsArbitraryLoads. Utilice este Plist para depurar.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
2) Excluir servidores locales
Alternativamente, puede utilizar un único archivo plist y excluir servidores específicos. Sin embargo, no parece que pueda excluir direcciones IP 4 , por lo que es posible que deba usar el nombre del servidor (que se encuentra en Preferencias del sistema -> Compartir o configurado en su DNS local).
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>server.local</key>
<dict/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>