Pregunta La seguridad del transporte ha bloqueado un texto claro HTTP


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

La seguridad del transporte ha bloqueado un recurso HTTP sin formato (http: //)   cargar ya que es inseguro. Las excepciones temporales se pueden configurar a través de   el archivo Info.plist de su aplicación.

Xcode

Supongamos que mi dominio es example.com.


1279
2017-07-06 20:10


origen


Respuestas:


Si está utilizando Xcode 8.0 y Swift 3.0 o Swift 2.2 o incluso Objective C:

Enter image description here

<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>

238
2017-10-28 07:06



Utilizar:

Enter image description here

Tienes que configurar el NSAllowsArbitraryLoads clave para  debajo NSAppTransportSecurity diccionario en su archivo .plist.

Plist configuration


889
2017-08-04 10:42



Aquí están las configuraciones visualmente:

visual settings for NSAllowsArbitraryLoads in info.plist via Xcode GUI


788
2017-11-14 19:08



Ver la publicación en el 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.


686
2017-07-06 20:19



Esto fue probado y estaba trabajando en iOS 9 semillas GM - esta es la configuración para permitir una específico dominio para usar 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>

NSAllowsArbitraryLoads debe ser falseporque no permite todas conexión insegura, pero la lista de excepciones permite la conexión a algunos dominios sin HTTPS.


296
2017-09-14 08:36



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

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

Lo que significa (según Documentación de Apple)

NSAllowsArbitraryLoads
  Un valor booleano utilizado para deshabilitar la seguridad del transporte de aplicaciones para cualquier dominio que no se encuentre en el diccionario NSExceptionDomains. Los dominios listados usan 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 los 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 permitir llamadas arbitrarias para todas las páginas, pero para PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE permitirá que las conexiones usen el protocolo HTTP.

Para el 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 (establecer en falso) y agregar excepciones para permitir solo las direcciones que sabemos que están bien.

Para lectores interesados


124
2017-09-01 12:10



Para aquellos de ustedes que quieren un contexto más en por qué esto está sucediendo, además de cómo solucionarlo, luego 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. El comportamiento de las mejores prácticas se hace cumplir por el Seguridad de transporte de la aplicación a:

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

Como se explica en el App Transport Security Technote, cuando se comunique con su servicio web, App Transport Security ahora tiene los siguientes requisitos y comportamiento:

  • El servidor debe admitir al menos la versión 1.2 del protocolo Transport Layer Security (TLS).
  • Los cifrados de conexión están limitados a aquellos que proporcionan secreto hacia adelante (consulte la lista de cifrados a continuación).
  • Los certificados se deben firmar utilizando un algoritmo SHA256 o mejor algoritmo hash de firma, con una clave RSA de 2048 bits o superior o una de 256 bits o   mayor clave de curva elíptica (ECC).
  • Los certificados no válidos dan como resultado una falla grave y ninguna conexión.

En otras palabras, su solicitud de servicio web debe: a.) Usar HTTPS y b.) se encriptarán utilizando TLS v1.2 con secretividad anticipada.

Sin embargo, como se mencionó en otras publicaciones, puede anular este nuevo comportamiento de Seguridad de transporte de aplicaciones al especificar el dominio inseguro en el Info.plist de tu aplicación.


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

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

  1. Abra su aplicación en Xcode.

  2. Encuentra el Info.plist archivo en Project Navigator y "right-mouse" haga clic en él y elija Abierto como > Código fuente opción de menú. El archivo de la lista de propiedades aparecerá en el panel derecho.

  3. Coloque el siguiente bloque de propiedades dentro del diccionario de propiedades principales (debajo del primer <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, deberá agregar otra propiedad de diccionario debajo NSExceptionDomains.

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


112
2017-09-21 17:56