La seguridad del transporte ha bloqueado un texto en claro HTTP

1451

¿Qué configuración debo poner en mi info.plistpara habilitar el modo HTTP según el siguiente mensaje de error?

La seguridad del transporte ha bloqueado una carga de recursos HTTP (http: //) en texto sin cifrar porque no es segura. Las excepciones temporales se pueden configurar a través del archivo Info.plist de su aplicación.

Xcode

Supongamos que mi dominio es example.com.

Jeef
fuente
15
Nota para el moderador : ya hay 36 respuestas a esta pregunta. Antes de agregar otro , asegúrese de que su solución sea nueva .
Matt
55
NOTA: Las soluciones aquí sugieren que debe desactivar ATS ( Allow arbitary loads). Pronto esto no será posible ya que Apple requerirá ATS (Originalmente a fin de año, la fecha límite se extendió) - developer.apple.com/news/?id=12212016b
Jakub Truhlář
@Jeef ¿por qué has agregado la etiqueta iOS 10? ¿Hubo algún cambio adicional en iOS 10 al respecto? Creo que se introdujo en iOS9 y esa etiqueta debería ser suficiente en términos de versiones de iOS
Julian Król, el

Respuestas:

469

Si está utilizando Xcode 8.0+ y Swift 2.2+ o incluso el Objetivo C:

Ingrese la descripción de la imagen aquí

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>
Anit Kumar
fuente
29
¿Por qué se NSAllowsArbitraryLoadsestablece en true? Subviertes el propósito de ATS. Consulte también El código más peligroso del mundo: validación de certificados SSL en software que no sea navegador . Su software acaba de hacer la lista.
jww
66
@jww Este es el propósito de esta publicación. El sitio al que necesito conectarme para reproducir audio todavía no usa HTTPS y no estoy tratando de esperar.
ThinkDigital
55
Esto no funcionará en iOS 10.0+ o MacOS 10.12+. En realidad, dice permitir todas las cargas arbitrarias, EXCEPTO las mencionadas (ejemplo.com). Por lo tanto, haría lo contrario de lo que se desea. NSAllowsArbirtraryLoads debe establecerse en falso aquí. más información: Documentos de Apple
Freek Sanders
1
De acuerdo, ¿por qué demonios están todos votando esto? no tiene sentido usar NSAllowsArbitraryLoads si establece un dominio de excepción.
thibaut noah
1
NSAllowsArbitraryLoads no necesita ser verdadero, por lo que debe eliminarse. NSExceptionDomains es suficiente, lo que permite una conexión no segura a ese dominio solamente. NSAllowsArbitraryLoads = true habilitará una conexión no segura a cualquier dominio, por lo que si aún establecerlo en verdadero hace que NSExceptionDomains no tenga sentido, ya que incluye todos los dominios
mister_giga
950

Utilice NSAppTransportSecurity:

Ingrese la descripción de la imagen aquí

Debe establecer la clave NSAllowsArbitraryLoads en en el diccionario NSAppTransportSecurity en su archivo info.plist.

Configuración de lista

Usuario123335511231
fuente
157
Hágalo saber: ¡ ESTO ES UNA SOLUCIÓN! Cada vez que usa HTTP sobre HTTPS, está abriendo los dispositivos de su usuario a las vulnerabilidades. Claro que es poco probable en muchos casos, pero la programación ética es la mejor práctica. Solo digo ... - también, +1 para el trabajo (con fines de prueba)
Jacksonkr
36
Esto NO es una solución, ¡esto es un HACK! Para agregar "excepciones" de dominio individual, vea esta respuesta a continuación: stackoverflow.com/a/32560433/1103584
DiscDev
17
Si bien se sabe que esta solución es vulnerable, es la única solución que recomendaría durante el DESARROLLO . Tener que escribir cada dominio exacto durante el desarrollo es una tontería (especialmente si está utilizando servicios web de terceros).
RETs
66
El nombre de esas claves ha cambiado ahora "Configuración de seguridad de transporte de aplicaciones" bajo "Permitir cargas arbitrarias"
vishal dharankar
11
¿Por qué hay tanta gente en contra de esta solución? ¡Esto definitivamente NO es un truco! Muchas aplicaciones necesitan comunicarse a Internet real donde el protocolo de seguridad no siempre está bajo su control. Por ejemplo, parece muy razonable poder mostrar imágenes de otros servidores que no tienen un certificado SSL.
Oren
825

Aquí están las configuraciones visualmente:

configuraciones visuales para NSAllowsArbitraryLoads en info.plist a través de Xcode GUI

William Cerniuk
fuente
10
No tengo esa opción.
Usuario
25
Si abre su Info.plist directamente, simplemente puede agregar el diccionario NSAppTransportSecurity y luego crear el elemento NSAllowsArbitraryLoads dentro de eso (vea la respuesta editada por Umar Farooq, a continuación).
Stoph
3
Lo mismo aquí: los dominios de excepción no funcionaron con 7.3 para mí.
RegularExpression
44
Esta opción no existe - XCode 7.3.1
jameshfisher
3
La información de @JoshPinter me funcionó con XCode 8.
Matthew Bellantoni
717

Ver la publicación del foro ¿Seguridad de transporte de aplicaciones? .

También la página Configuración de excepciones de seguridad de transporte de aplicaciones en iOS 9 y OSX 10.11 .

Por ejemplo, puede agregar un dominio específico como:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>example.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>

La opción perezosa es:

<key>NSAppTransportSecurity</key>
<dict>
  <!--Include to allow all connections (DANGER)-->
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>

Nota:

info.plist es un archivo XML para que pueda colocar este código más o menos en cualquier lugar dentro del archivo.

KMLong
fuente
1
¿Cómo puedo hacer eso? Quiero decir, ¿cuál es la forma de agregar este código a Info.plist porque no sé dónde pegar este código?
lmiguelvargasf
2
@lmiguelvargasf abre tu info.plist en un editor de texto plano
Dan Beaulieu
77
Todavía recibo el error: el dominio de excepción está configurado y NSAllowsArbitraryLoads es falso. Incluso con NSAllowsArbitraryLoads configurado como verdadero, aparece el error. ¿Alguien más aquí tiene este problema?
klaevv
3
A partir del 30/01/2016, el documento de Apple muestra que las claves ya no tienen la palabra temporal en ellas, por ejemplo: NSExceptionAllowsInsecureHTTPLoads NSExceptionMinimumTLSVersion Consulte developer.apple.com/library/prerelease/ios/documentation/…
Philippe Monnet
3
En caso de que alguien más se esté sacando el pelo porque hacer estos simples cambios en info.plist no funciona ... agregue los cambios a Proyecto> Destino> Información> Propiedades de destino iOS personalizadas
BlueGuy
330

Esto se probó y estaba funcionando en la semilla GM de iOS 9: esta es la configuración para permitir que un dominio específico use HTTP en lugar de HTTPS:

<key>NSAppTransportSecurity</key>
<dict>
      <key>NSAllowsArbitraryLoads</key> 
      <false/>
       <key>NSExceptionDomains</key>
       <dict>
            <key>example.com</key> <!--Include your domain at this line -->
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
            </dict>
       </dict>
</dict>

NSAllowsArbitraryLoadsdebe serlo false, ya que no permite todas las conexiones inseguras, pero la lista de excepciones permite la conexión a algunos dominios sin HTTPS.

Sound Blaster
fuente
77
ESTO debe marcarse como la respuesta. Probado y trabajando en iOS 9 GM seed para permitir que un dominio específico use http sin tomar la forma "perezosa" y abrir completamente su aplicación.
DiscDev
2
¿Cómo agrego esto a mi info.plist?
JMStudios.jrichardson
8
Ok, agregué esa entrada a mi info.plist y sigo recibiendo este error: "App Transport Security ha bloqueado una carga de recursos HTTP (http: //) en texto claro, ya que no es seguro. Las excepciones temporales se pueden configurar a través de la información de su aplicación archivo .plist ".
KMC
2
@RomanShapovalov si debe usar una dirección IP, intente agregar .xip.io al final de la dirección IP y agregue xip.io a sus NSExceptionDomains. Ver xip.io . Me conecto directamente a IP cuando desarrollo (pero no lo lanzo) y esto funciona muy bien para mí.
tpankake
2
No funcionó para mí hasta que me di cuenta de que lo había puesto en la lista de información incorrecta en mi proyecto de prueba. ¡Asegúrate de ponerlo en el correcto!
Chucky
144

Esta es una solución rápida (pero no recomendada) para agregar esto en la lista:

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

Lo que significa (de acuerdo con la documentación de Apple ):

NSAllowsArbitraryLoads
Un valor booleano que se usa para deshabilitar App Transport Security para cualquier dominio que no se encuentre en el diccionario NSExceptionDomains. Los dominios listados utilizan la configuración especificada para ese dominio.

El valor predeterminado de NO requiere el comportamiento predeterminado de Seguridad de transporte de aplicaciones para todas las conexiones.

Realmente recomiendo enlaces:

que me ayudan a entender las razones y todas las implicaciones.

El XML (en el archivo Info.plist) a continuación:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

no permite llamadas arbitrarias para todas las páginas, pero for PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDEpermitirá que las conexiones usen el protocolo HTTP.

Al XML anterior puede agregar:

<key>NSIncludesSubdomains</key>
<true/>

si desea permitir conexiones inseguras para los subdominios de la dirección especificada.

El mejor enfoque es bloquear todas las cargas arbitrarias (establecido en falso) y agregar excepciones para permitir solo las direcciones que sabemos que están bien.

Para lectores interesados

Actualización 2018:

Apple no recomienda apagar esto: se puede encontrar más información en 207 sesiones WWDC 2018 con más detalles explicados con respecto a la seguridad

Dejando la respuesta original por razones históricas y fase de desarrollo

Julian Król
fuente
1
NSAllowsArbitraryLoadsdebe serfalse
Sound Blaster
@SoundBlaster para qué caso y qué ves mal en mi respuesta a la votación negativa?
Julian Król
añadiendo en plist (NSAllowsArbitraryLoads NSAppTransportSecurity), todo servicio web funciona bien excepto el servicio error interno del servidor retorno de un servicio web de un alma (500) en IOS 9, pero funciona bien en iOS8 o temprano
Amit Gupta
@SoundBlaster hizo un cambio, ahora no deberías tener objeciones :)
Julian Król
Gracias, ¿cómo agregas realmente el <key>NSIncludesSubdomains</key> <true/>? ¿Cada entorno tiene que estar rodeado <dict>? ¿Cómo editas este maldito archivo plist? ¿Cuál es el formato? : D Gracias.
Agente Zebra
116

Para aquellos de ustedes que quieren un contexto más sobre por qué sucede esto, además de cómo solucionarlo, lea a continuación.

Con la introducción de iOS 9, para mejorar la seguridad de las conexiones entre una aplicación y los servicios web, las conexiones seguras entre una aplicación y su servicio web deben seguir las mejores prácticas . App Security Security impone el comportamiento de las mejores prácticas para:

  • evitar la divulgación accidental, y
  • proporcionar un comportamiento predeterminado que sea seguro.

Como se explica en la Nota técnica de App Transport Security , cuando se comunica con su servicio web, App Transport Security ahora tiene los siguientes requisitos y comportamientos:

  • El servidor debe admitir al menos la versión 1.2 del protocolo de Seguridad de la capa de transporte (TLS).
  • Los cifrados de conexión están limitados a aquellos que brindan confidencialidad directa (consulte la lista de cifrados a continuación).
  • Los certificados deben firmarse utilizando un algoritmo de hash de firma SHA256 o mejor, con una clave RSA de 2048 bits o más o una clave de curva elíptica (ECC) de 256 bits o más.
  • Los certificados no válidos provocan un fallo grave y no hay conexión.

En otras palabras, su solicitud de servicio web debe: a.) Usar HTTPS y b.) Estar encriptada usando TLS v1.2 con confidencialidad.

Sin embargo, como se mencionó en otras publicaciones, puede anular este nuevo comportamiento de App Transport Security especificando el dominio inseguro en la Info.plistaplicación.


Para anular, deberá agregar las NSAppTransportSecurity> NSExceptionDomainspropiedades del diccionario a su Info.plist. A continuación, agregará el dominio de su servicio web al NSExceptionDomainsdiccionario.

Por ejemplo, si deseo omitir el comportamiento de Seguridad de transporte de aplicaciones para un servicio web en el host www.yourwebservicehost.com, entonces haría lo siguiente:

  1. Abre tu aplicación en Xcode.

  2. Busque el Info.plistarchivo en Project Navigator y haga clic con el botón derecho del mouse en él y elija la opción de menú Abrir como > Código fuente . El archivo de la lista de propiedades aparecerá en el panel derecho.

  3. Coloque el siguiente bloque de propiedades dentro del diccionario de propiedades principal (debajo del primero <dict>).


<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

Si necesita proporcionar excepciones para dominios adicionales, entonces agregaría otra propiedad de diccionario debajo NSExceptionDomains.

Para obtener más información sobre las claves mencionadas anteriormente, lea esta nota técnica ya mencionada .

whyceewhite
fuente
1
Esto funcionó en 2 de mis aplicaciones, pero no funciona en una tercera. ¿Alguien más ha encontrado una situación de uso de la solución anterior y sigue recibiendo el mismo mensaje de error? (y sí, actualicé el diccionario para usar mi dominio API, no el que está en el código)
helloB
Mejor! Apple confirma que esta solución usa
YannSteph
Esto funcionó para un archivo de edición de aplicaciones Cordova / Phonegap / Ionic ./platforms/ios/<project>/<project>-Info.plistcon NSAllowsArbitraryLoads=falsey muchos dominios de excepción para servicios con diferentes combinaciones de TLS / HTTP / HTTPS. Inicialmente utilizado, NSAllowsArbitraryLoads=trueluego ajustado, solucionando problemas de las reglas a través de prueba y error para cumplir con las pautas y enviar para su aprobación. Las config.xml <access origin=.../>declaraciones de nota completan parcialmente este archivo, pero actualmente requieren un ajuste mediante edición directa o mediante XCode para obtener los detalles correctos.
jimmont
También <access origin="*"/>(en config.xml) establece NSAllowsArbitraryLoads=true(para Cordova / Phonegap / aplicaciones híbridas
jimmont
¿Por qué se NSExceptionAllowsInsecureHTTPLoadsestablece en true? Subviertes el propósito de ATS. Consulte también El código más peligroso del mundo: validación de certificados SSL en software que no sea navegador . Su software acaba de hacer la lista.
jww
67

No me gusta editar el plist directamente. Puede agregarlo fácilmente al plist usando la GUI:

  • Haga clic en Info.plist en el Navegador a la izquierda.
  • Ahora cambie los datos en el área principal:

    • En la última línea agregue el +
    • Ingrese el nombre del grupo: Configuración de seguridad de transporte de aplicaciones
    • Haga clic derecho en el grupo y seleccione Add Row
    • Ingrese Permitir cargas arbitrarias
    • Establezca el valor de la derecha en

Ejemplo

Vincent
fuente
Para aclarar: si "Permitir cargas arbitrarias" es SÍ, y hay "Dominios de excepción", entonces las cargas permitidas están restringidas a las de los Dominios de excepción. ¿Es eso correcto?
¿Es esa una forma segura de hacerlo si quiero liberar la aplicación?
Lamour
No. Al permitir cargas arbitrarias, su aplicación puede conectarse a cualquier dominio libremente. Desde el punto de vista de la seguridad, debe controlar y limitar a qué dominio / sitio web debe conectarse la aplicación, para evitar el uso inesperado de la red.
Raptor
La mayoría de las aplicaciones se dirigen solo a servidores conocidos. Esto es controlado por el desarrollador. Por eso se conocen los problemas de seguridad.
Vincent
¿Por qué se NSAllowsArbitraryLoadsestablece en YES? Subviertes el propósito de ATS. Consulte también El código más peligroso del mundo: validación de certificados SSL en software que no sea navegador . Su software acaba de hacer la lista.
jww
25

Documento de Apple 1

Documento de Apple 2

Hay dos soluciones para esto:

Soluciones 1:

  1. En el Info.plistarchivo, agregue un diccionario con la clave 'NSAppTransportSecurity '
  2. Agregue otro elemento dentro del diccionario con clave 'Allow Arbitrary Loads'

Plist la estructura debe aparecer como se muestra en la imagen de abajo.

Solución 1

Solución 2:

  1. En el Info.plistarchivo, agregue un diccionario con la clave 'NSAppTransportSecurity '
  2. Agregue otro elemento dentro del diccionario con la tecla 'NSExceptionDomains '
  3. Agregar elemento con clave 'MyDomainName.com' de tipo NSDictionary
  4. Agregar elemento con clave ' NSIncludesSubdomains' de tipo Booleany valor establecido comoYES
  5. Agregar elemento con clave ' NSTemporaryExceptionAllowsInsecureHTTPLoads' de tipo Booleany valor establecido comoYES

Plist la estructura debe aparecer como se muestra en la imagen de abajo.

Solución 2

Se prefiere la solución 2, ya que solo permite el dominio seleccionado, mientras que la solución 1 permite todas las conexiones HTTP inseguras.

Jayprakash Dubey
fuente
¿Por qué se NSAllowsArbitraryLoadsestablece en YES? Subviertes el propósito de ATS. Consulte también El código más peligroso del mundo: validación de certificados SSL en software que no sea navegador . Su software acaba de hacer la lista.
jww
20

La seguridad de transporte está disponible en iOS 9.0 o posterior. Es posible que tenga esta advertencia cuando intente llamar a un WS dentro de su aplicación:

Application Transport Security ha bloqueado una carga de recursos de texto en claro HTTP (http: //) ya que no es segura. Las excepciones temporales se pueden configurar a través del archivo Info.plist de su aplicación.

Agregar lo siguiente a su Info.plist deshabilitará ATS:

<key>NSAppTransportSecurity</key>
<dict>
     <key>NSAllowsArbitraryLoads</key><true/>
</dict>
Malek Belkahla
fuente
1
NSAllowsArbitraryLoads debe ser falso, si es cierto, permite toda conexión insegura
Thiago Arreguy
añadiendo en plist todo servicio web funciona bien excepto el servicio de error Una web de un servidor web interno de retorno de servicio (500) en IOS 9, pero funciona bien en iOS8 o temprano
Amit Gupta
1
Aceptado en la tienda?
Vrashabh Irde
Muy mal consejo; ver El código más peligroso del mundo: validar certificados SSL en software que no sea de navegador . Dada la pregunta si está lleno de la forma recomendada de hacer las cosas, "yo también" respuestas como esta no son necesarias.
jww
15

Ejemplo de desarrollo

Aquí hay una captura de pantalla de un plist que mantiene el ATS intacto (= seguro), pero permite que las conexiones a localhost se puedan realizar a través de HTTP en lugar de HTTPS . Funciona en Xcode 7.1.1.

Ingrese la descripción de la imagen aquí

Sebastian
fuente
¿Hay alguna manera de hacer que localhost sea seguro, es decir, usando HTTPS, en react-native para que no tengamos que usar la NSExceptionAllowsInsecureHTTPLoads - YESconfiguración predeterminada ?
milkersarac
13

Ve a tu Info.plist

  1. Haga clic derecho en el espacio vacío y haga clic en Agregar fila
  2. Escriba el nombre clave como NSAppTransportSecurity, debajo de él
  3. Seleccione Dominios de excepción, agregue un nuevo elemento a esto
  4. Escriba su nombre de dominio al que se necesita acceder
  5. Cambie el tipo de dominio de cadena a diccionario, agregue un nuevo elemento
  6. NSTemporaryExceptionAllowsInsecureHTTPLoads, que será un valor booleano con un valor verdadero. Mira la imagen para seguirla correctamente
Shailendra Suriyal
fuente
1
¿Por qué se NSAllowsArbitraryLoadsestablece en true? Subviertes el propósito de ATS. Consulte también El código más peligroso del mundo: validación de certificados SSL en software que no sea navegador . Su software acaba de hacer la lista.
jww
13

Según Apple, generalmente deshabilitar ATS conducirá al rechazo de la aplicación, a menos que tenga una buena razón para hacerlo. Incluso entonces, debe agregar excepciones para dominios a los que puede acceder de forma segura.

Apple tiene una excelente herramienta que te dice exactamente qué configuración usar: en Terminal, ingresa

/usr/bin/nscurl --ats-diagnostics --verbose https://www.example.com/whatever

y nscurl verificará si esta solicitud falla, y luego probará una variedad de configuraciones y le dirá exactamente cuál pasa y qué hacer. Por ejemplo, para algunas URL de terceros que visito, este comando me dijo que este diccionario pasa:

{
    NSExceptionDomains = {
        "www.example.com" = {
            NSExceptionRequiresForwardSecrecy = false;
        };
    };
}

Para distinguir entre sus propios sitios y los de terceros que están fuera de su control, use, por ejemplo, la clave NSThirdPartyExceptionRequiresForwardSecrecy.

gnasher729
fuente
1
es una gran herramienta para verificar antes de probar con la aplicación. ahorrar tiempo. pero cualquier recurso para leer para comprender la salida de este comando.
DamithH
1
Herramienta interesante Sin embargo, en mi caso, exagera las cosas. Enumera tres claves incluidas NSExceptionAllowsInsecureHTTPLoads = true;, pero resulta que no es necesaria.
Chris Prince
11

Averiguar qué configuraciones usar se puede realizar automáticamente, como se menciona en esta nota técnica :

/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com
ecotax
fuente
Necesitas OS X 10.11 (El Capitan) para esto, aparentemente.
ecotax
10

NOTA: El dominio de excepción en su plist debe estar en CASO INFERIOR.

Ejemplo: ha nombrado a su máquina "MyAwesomeMacbook" en Configuración-> Compartir; su servidor (para fines de prueba) se ejecuta en MyAwesomeMacbook.local: 3000, y su aplicación debe enviar una solicitud a http: //MyAwesomeMacbook.local: 3000 / files ..., su lista deberá especificar "myawesomemacbook. local "como el dominio de excepción.

-

Su info.plist contendría ...

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>myawesomemacbook.local</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
    </dict>
  </dict>
</dict>
ObjectiveTC
fuente
9

Utilizar:

Captura de pantalla de PList para comprender mejor

Agregue un nuevo elemento, NSAppTransportSecurity , en el archivo plist con el tipo Diccionario , luego agregue el sub elemento NSAllowsArbitraryLoads en el diccionario de tipo Boolean y establezca el valor bool . Esto funciona para mi.

Tejinder
fuente
1
NSAllowsArbitraryLoads debe ser falso, si es cierto, permite toda conexión insegura
Thiago Arreguy
al agregar en plist todos los servicios web funcionan bien, excepto un servicio web, un error de servidor interno devuelto (500) en iOS 9 pero funciona bien en iOS8 o posterior @ThiagoArreguy
amit gupta
Muy mal consejo; ver El código más peligroso del mundo: validar certificados SSL en software que no sea de navegador . Dada la pregunta si está lleno de la forma recomendada de hacer las cosas, "yo también" respuestas como esta no son necesarias.
jww
Sé que es un mal consejo, pero solo es una solución por el momento solo en modo de desarrollo. Apple nos ha proporcionado flexibilidad, si es tan malo, no lo permitirían.
Tejinder
9

En 2015-09-25 (después de las actualizaciones de Xcode en 2015-09-18):

Usé un método no perezoso, pero no funcionó. Los siguientes son mis intentos.

Primero,

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

Y segundo,

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

Finalmente, usé el método perezoso:

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

Puede ser un poco inseguro, pero no pude encontrar otras soluciones.

Heedoo
fuente
¿Por qué se NSAllowsArbitraryLoadsestablece en true? Subviertes el propósito de ATS. Consulte también El código más peligroso del mundo: validación de certificados SSL en software que no sea navegador . Su software acaba de hacer la lista.
jww
9

En swift 4 y xocde 10 se cambia NSAllowsArbitraryLoads para permitir cargas arbitrarias. así se verá así:

<key>App Transport Security Settings</key>
<dict>
     <key>Allow Arbitrary Loads</key><true/>
</dict>
Faris
fuente
6

Vale la pena mencionar cómo llegar ...

Info.plist es uno de los archivos debajo del Main.storyboard o viewController.swift.

Cuando hace clic en él por primera vez, generalmente está en formato de tabla, por lo que debe hacer clic con el botón derecho en el archivo y 'abrir como' código fuente y luego agregar el siguiente código hacia el final, es decir:

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

Copia y pega el código justo arriba

 "</dict>
</plist>"

que está al final

Naishta
fuente
¿Por qué se NSAllowsArbitraryLoadsestablece en true? Subviertes el propósito de ATS. Consulte también El código más peligroso del mundo: validación de certificados SSL en software que no sea navegador . Su software acaba de hacer la lista.
jww
5

Actualización para Xcode 7.1, que enfrenta el problema 27.10.15:

El nuevo valor en Info.plist es "Configuración de seguridad de transporte de aplicaciones". A partir de ahí, este diccionario debe contener:

  • Permitir cargas arbitrarias = SÍ
  • Dominios de excepción (inserte aquí su dominio http)
MkaysWork
fuente
4

Para aquellos que vinieron aquí tratando de encontrar la razón por la cual su WKWebView siempre es blanco y no carga nada (exactamente como se describe aquí, ¿cómo hago para que WKWebView funcione de manera rápida y para una aplicación macOS? ):

Si toda la ciencia de cohetes anterior no funciona para usted, verifique lo obvio: la configuración de sandbox

configuraciones de sandbox]

Al ser nuevo en Swift y Cocoa, pero con bastante experiencia en programación, pasé unas 20 horas para encontrar esta solución. Ninguno de los docenas de tutoriales de iOS hipster ni notas clave de Apple: nada menciona esta pequeña casilla de verificación.

Alekseev Vladimir
fuente
¡Dios mío, muchas gracias! ¡Me salvaste la misma búsqueda de 20 horas!
Brecht Machiels
2
no ver esa sección en la sección Capacidades del objetivo (Xcode 9.4.1)
cuña
3

Por defecto, iOS solo permite la API HTTPS. Como HTTP no es seguro, deberá deshabilitar la seguridad del transporte de aplicaciones. Hay dos formas de deshabilitar ATS: -

1. Agregue el código fuente en info.plist del proyecto y agregue el siguiente código en la etiqueta raíz.

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

2. Usando la información del proyecto.

Haga clic en el proyecto en el panel izquierdo, seleccione el proyecto como objetivo y elija la pestaña de información. Debe agregar el diccionario en la siguiente estructura.

ingrese la descripción de la imagen aquí

varunrathi28
fuente
3

¿Como arreglarlo?

ingrese la descripción de la imagen aquí

Debajo de los pasos para arreglarlo.

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Kamani Jasmin
fuente
1

El uso NSExceptionDomainspuede no aplicar un efecto simultáneamente debido a que el sitio de destino puede cargar recursos (por ejemplo, jsarchivos) desde dominios externos http. Se puede resolver agregando estos dominios externos aNSExceptionDomains .

Para inspeccionar qué recursos no se pueden cargar, intente utilizar la depuración remota. Aquí hay un tutorial: http://geeklearning.io/apache-cordova-and-remote-debugging-on-ios/

Nurlan Akashayev
fuente
0

Para Cordova, si desea agregarlo a su ios.json, haga lo siguiente:

"NSAppTransportSecurity": [
   {
      "xml": "<dict><key>NSAllowsArbitraryLoads</key><true /></dict>"
   }
]

Y debería estar dentro de:

"*-Info.plist": {
   "parents": {
   }
}
zeusstl
fuente
Simplemente <access origin = "*" /> en config.xml no funcionó. No estoy seguro si ambos son necesarios, pero la solución ios.json cerró el trato para mí.
zeusstl
¿Por qué se NSAllowsArbitraryLoadsestablece en true? Subviertes el propósito de ATS. Consulte también El código más peligroso del mundo: validación de certificados SSL en software que no sea navegador . Su software acaba de hacer la lista.
jww
-1

Como muchos han notado, este es un problema de características que viene con iOS 9.0. Han agregado una cosa llamada Seguridad de transporte de aplicaciones, y a mí también me molestó cuando rompió mis aplicaciones.

Puede vendarlo con la clave NSAllowsArbitraryLoads a SÍ en el diccionario NSAppTransportSecurity en su archivo .plist, pero finalmente deberá volver a escribir el código que forma sus URL para formar el prefijo HTTPS: //.

Apple ha reescrito la clase NSUrlConnection en iOS 9.0. Puedes leer sobre esto en NSURLConnection .

De lo contrario, es posible que deba retirarse de iOS 9.0 hasta que tenga tiempo de implementar la solución correcta.

Mark DeWald
fuente