A segurança de transporte bloqueou um HTTP em texto não criptografado

1451

Que configuração eu preciso colocar no meu info.plistpara ativar o modo HTTP de acordo com a seguinte mensagem de erro?

A segurança de transporte bloqueou um carregamento de recurso HTTP (http: //) em texto não criptografado, pois é inseguro. Exceções temporárias podem ser configuradas através do arquivo Info.plist do seu aplicativo.

Xcode

Suponha que meu domínio seja example.com.

Jeef
fonte
15
Nota do moderador : Já existem 36 respostas para esta pergunta. Antes de adicionar outro , verifique se a sua solução é nova .
Matt
5
NOTA: As soluções aqui sugerem que você desative o ATS ( Allow arbitary loads). Logo isso não será possível desde que a Apple vai exigir ATS (Originalmente o final do ano - prazo foi estendido) - developer.apple.com/news/?id=12212016b
Jakub Truhlář
@ Jeef, por que você adicionou a tag iOS 10? houve alguma alteração adicional no iOS 10 nesse assunto? Eu sinto que ele foi introduzido em iOS9 e que tag deve ser suficiente em termos de versões iOS
Julian Król

Respostas:

469

Se você estiver usando o Xcode 8.0+ e o Swift 2.2+ ou até o Objetivo 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>
Anit Kumar
fonte
29
Por que está NSAllowsArbitraryLoadsdefinido como true? Você subverte o objetivo do ATS. Consulte também O código mais perigoso do mundo: validando certificados SSL em software que não seja o navegador . Seu software acabou de entrar na lista.
JWW
6
@jww Este é o objetivo deste post. O site ao qual preciso me conectar para reproduzir áudio ainda não usa HTTPS e não estou tentando esperar.
ThinkDigital
5
Isso não funcionará no iOS 10.0+ ou no MacOS 10.12+. Na verdade, ele diz permitir todos os carregamentos arbitrários, EXCETO os mencionados (exemplo.com). Assim, ele faria o inverso do que é desejado. NSAllowsArbirtraryLoads deve ser definido como false aqui. mais informações: Apple docs
Freek Sanders /
1
Concordo, por que diabos todos estão votando nisso? não faz sentido usar NSAllowsArbitraryLoads se você definir um domínio de exceção.
Thibaut noah
1
NSAllowsArbitraryLoads não precisa ser verdadeiro, portanto, ele deve ser removido. NSExceptionDomains é suficiente, o que permite apenas uma conexão não segura a esse domínio. NSAllowsArbitraryLoads = true permitirá a conexão não segura a qualquer domínio, portanto, se a configuração for verdadeira, a bobagem do NSExceptionDomains terá uma vez que inclui todos os domínios
mister_giga 17/01
950

Use NSAppTransportSecurity:

Enter image description here

Você deve definir a chave NSAllowsArbitraryLoads como YES no dicionário NSAppTransportSecurity em seu arquivo info.plist .

Plist configuration

Usuário123335511231
fonte
157
Deixe-o saber: ESTE É UM SOLUÇÃO! Sempre que você usa HTTP sobre HTTPS, abre o (s) dispositivo (s) do usuário para vulnerabilidades. Claro que é improvável em muitos casos, mas a programação ética é a melhor prática. Apenas dizendo ... - também, uma para o trabalho (para fins de teste)
Jacksonkr
36
Esta não é uma solução - este é um HACK! Para adicionar "exceções" de domínio individual, consulte esta resposta abaixo: stackoverflow.com/a/32560433/1103584
DiscDev
17
Embora se saiba que esta solução é vulnerável, é a única solução que eu recomendaria durante o DESENVOLVIMENTO . Ter que digitar todos os domínios exatos durante o desenvolvimento é uma bobagem (especialmente se você estiver usando serviços da web de terceiros).
reTs 03/11/19
6
Nome dessas chaves mudaram agora "Configurações de Segurança de Transporte App" em que "Permitir Cargas arbitrária"
Vishal dharankar
11
Por que tantas pessoas são contra essa solução? Definitivamente, NÃO é um hack! Muitos aplicativos precisam se comunicar com a Internet real, onde o protocolo de segurança nem sempre está sob seu controle. Por exemplo, parece muito razoável poder mostrar imagens de outros servidores que não possuem um certificado SSL.
Oren
825

Aqui estão as configurações visualmente:

visual settings for NSAllowsArbitraryLoads in info.plist via Xcode GUI

William Cerniuk
fonte
10
Eu não tenho essa opção.
Utilizador
25
Se você abrir o Info.plist diretamente, poderá adicionar o dicionário NSAppTransportSecurity e, em seguida, criar o item NSAllowsArbitraryLoads (consulte a resposta editada por Umar Farooq, abaixo).
Stoph
3
O mesmo aqui - domínios de exceção não funcionaram com 7.3 para mim.
RegularExpression
4
Esta opção não existe - XCode 7.3.1
jameshfisher 23/06
3
A informação de @JoshPinter funcionou para mim com o Xcode 8.
Matthew Bellantoni
717

Veja a publicação no fórum Application Transport Security? .

Também na página Configurando exceções de segurança do App Transport no iOS 9 e OSX 10.11 .

Por exemplo, você pode adicionar um domínio 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>

A opção lenta é:

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

Nota:

info.plist é um arquivo XML para que você possa colocar esse código mais ou menos em qualquer lugar dentro do arquivo.

KMLong
fonte
1
Como posso fazer isso, quero dizer qual é a maneira de adicionar esse código ao Info.plist porque não sei onde colar esse código?
Lmiguelvargasf 30/07/2015
2
@lmiguelvargasf abrir o seu info.plist em um editor de texto simples
Dan Beaulieu
7
Ainda recebo o erro: o domínio de exceção está definido e NSAllowsArbitraryLoads é falso. Mesmo com NSAllowsArbitraryLoads definido como verdadeiro, o erro é exibido. Alguém mais aqui tem esse problema?
Klaevv 13/10/2015
3
A partir de 1/30/2016 mostra doc Apple que as chaves já não têm a palavra temporária neles, por exemplo: NSExceptionAllowsInsecureHTTPLoads NSExceptionMinimumTLSVersion Veja developer.apple.com/library/prerelease/ios/documentation/...
Philippe Monnet
3
No caso de alguém mais está arrancando os cabelos porque fazer estas mudanças simples para info.plist não está funcionando .. adicionar as alterações ao Projeto> Target> Info> iOS Propriedades alvo personalizados
Blueguy
330

Isso foi testado e estava funcionando na semente do iOS 9 GM - esta é a configuração para permitir que um domínio específico use HTTP em vez 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>

NSAllowsArbitraryLoadsdeve ser false, porque não permite todas as conexões inseguras, mas a lista de exceções permite a conexão com alguns domínios sem HTTPS.

Sound Blaster
fonte
7
ISTO deve ser marcado como a resposta. Testado e funcionando no iOS 9 GM seed para permitir que um domínio específico use http sem seguir o caminho "preguiçoso" e abrir completamente o aplicativo.
DiscDev
2
Como adiciono isso ao meu info.plist?
JMStudios.jrichardson
8
Ok, eu adicionei essa entrada ao meu info.plist e ainda estou recebendo este erro - "O App Transport Security bloqueou um carregamento de recurso HTTP (http: //) em texto não criptografado, pois é inseguro. Exceções temporárias podem ser configuradas nas informações do aplicativo. arquivo .plist. "
KMC 5/10
2
@RomanShapovalov, se você precisar usar um endereço IP, tente adicionar .xip.io ao final do endereço IP e adicione xip.io ao seu NSExceptionDomains. Veja xip.io . Eu me conecto diretamente ao IP no desenvolvimento (mas não no release) e isso funciona muito bem para mim.
tpankake
2
Não estava funcionando para mim até que eu percebi que tinha colocado a informação errada.plist no meu projeto de teste. Certifique-se de colocá-lo no caminho certo!
Chucky
144

Esta é uma solução rápida (mas não recomendada) para adicionar isso ao plist:

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

O que significa (de acordo com a documentação da Apple ):

NSAllowsArbitraryLoads
Um valor booleano usado para desativar o App Transport Security para todos os domínios não listados no dicionário NSExceptionDomains. Os domínios listados usam as configurações especificadas para esse domínio.

O valor padrão NO requer o comportamento padrão do App Transport Security para todas as conexões.

Eu realmente recomendo links:

o que me ajuda a entender as razões e todas as implicações.

O XML (no arquivo Info.plist) abaixo irá:

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

não permitir chamadas arbitrárias para todas as páginas, mas for PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDEpermitirá que essas conexões usem o protocolo HTTP.

Para o XML acima, você pode adicionar:

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

se você deseja permitir conexões não seguras para os subdomínios do endereço especificado.

A melhor abordagem é bloquear todas as cargas arbitrárias (configuradas como false) e adicionar exceções para permitir apenas endereços que sabemos que estão bem.

Para leitores interessados

Atualização de 2018:

A Apple não recomenda a desativação - mais informações podem ser encontradas na sessão 207 da WWDC 2018 com mais coisas explicadas em relação à segurança

Deixando a resposta original por razões históricas e fase de desenvolvimento

Julian Król
fonte
1
NSAllowsArbitraryLoadsdeve serfalse
Sound Blaster
@SoundBlaster para que caso e o que você vê de errado na minha resposta ao voto negativo?
Julian Król
adicionando in plist (NSAppTransportSecurity NSAllowsArbitraryLoads), todos os serviços da Web funcionando bem, exceto um serviço da Web, um serviço da Web retornam erro interno do servidor (500) no iOS 9, mas funcionando bem no iOS8 ou posterior
Amit Gupta
@SoundBlaster fez uma alteração, agora você não deve ter objeções :)
Julian Król
Obrigado, como você realmente adiciona o <key>NSIncludesSubdomains</key> <true/>? Todas as configurações precisam ser cercadas <dict>? como você edita esse maldito arquivo plist? Qual é a formatação? : D Obrigado.
Agent Zebra
116

Para aqueles que desejam um contexto mais aprofundado sobre o motivo disso acontecer, além de como corrigi-lo, leia abaixo.

Com a introdução do iOS 9, para melhorar a segurança das conexões entre um aplicativo e serviços da web, as conexões seguras entre um aplicativo e seu serviço da web devem seguir as práticas recomendadas . O comportamento das melhores práticas é imposto pelo App Transport Security para:

  • impedir a divulgação acidental, e
  • forneça um comportamento padrão seguro.

Conforme explicado na Nota técnica de segurança de transporte de aplicativo , ao se comunicar com seu serviço da Web, o App Transport Security agora possui os seguintes requisitos e comportamento:

  • O servidor deve suportar pelo menos a versão 1.2 do protocolo Transport Layer Security (TLS).
  • As cifras de conexão são limitadas àquelas que fornecem sigilo para a frente (veja a lista de cifras abaixo).
  • Os certificados devem ser assinados usando um algoritmo de hash de assinatura SHA256 ou melhor, com uma chave RSA de 2048 bits ou superior ou uma chave de curva elíptica (ECC) de 256 bits ou superior.
  • Certificados inválidos resultam em falha grave e sem conexão.

Em outras palavras, sua solicitação de serviço da web deve: a.) Usar HTTPS eb.) Ser criptografada usando o TLS v1.2 com sigilo direto.

No entanto, como mencionado em outras postagens, você pode substituir esse novo comportamento do App Transport Security especificando o domínio não seguro no diretório Info.plist aplicativo.


Para substituir, você precisará adicionar o NSAppTransportSecurity>NSExceptionDomains propriedades do dicionário ao seu Info.plist. Em seguida, você adicionará o domínio do seu serviço da web ao NSExceptionDomainsdicionário.

Por exemplo, se eu quiser ignorar o comportamento da Segurança de Transporte de Aplicativo para um serviço da Web no host www.yourwebservicehost.com , faça o seguinte:

  1. Abra seu aplicativo no Xcode.

  2. Localize o Info.plistarquivo no Project Navigator e clique com o botão direito do mouse e escolha a opção de menu Abrir como > Código-fonte . O arquivo da lista de propriedades aparecerá no painel direito.

  3. Coloque o seguinte bloco de propriedades dentro do dicionário de propriedades principal (abaixo do primeiro <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>

Se você precisar fornecer exceções para domínios adicionais, adicione outra propriedade de dicionário abaixo NSExceptionDomains .

Para descobrir mais sobre as chaves mencionadas acima, leia esta nota técnica já mencionada .

whyceewhite
fonte
1
Isso funcionou em dois dos meus aplicativos, mas não está funcionando em um terceiro. Alguém mais encontrou uma situação usando a correção acima e ainda recebendo a mesma mensagem de erro? (e sim, eu atualizei o dicionário para usar o meu domínio API, não aquele no código)
helloB
Melhor ! A Apple confirma que esta solução é utilizada
YannSteph
Isso funcionou para um arquivo de edição de aplicativo Cordova / Phonegap / Ionic ./platforms/ios/<project>/<project>-Info.plistcom NSAllowsArbitraryLoads=falsemuitos domínios de exceção para serviços com diversas combinações de TLS / HTTP / HTTPS. Inicialmente usado, em NSAllowsArbitraryLoads=trueseguida, ajustado, solucionando problemas das regras por tentativa e erro para cumprir as diretrizes e enviar para aprovação. As config.xml <access origin=.../>instruções de observação preenchem parcialmente esse arquivo, mas atualmente requerem ajustes por edição direta ou via XCode para obter os detalhes corretos.
jimmont
Também <access origin="*"/>(no config.xml) define NSAllowsArbitraryLoads=true(para aplicativos Cordova / Phonegap / híbrido
jimmont 10/15/15
Por que está NSExceptionAllowsInsecureHTTPLoadsdefinido como true? Você subverte o objetivo do ATS. Consulte também O código mais perigoso do mundo: validando certificados SSL em software que não seja o navegador . Seu software acabou de entrar na lista.
JWW
67

Eu não gosto de editar o plist diretamente. Você pode adicioná-lo facilmente ao plist usando a GUI:

  • Clique no Info.plist no Navegador à esquerda.
  • Agora altere os dados na área principal:

    • Na última linha, adicione o botão +
    • Digite o nome do grupo: Configurações de segurança de transporte de aplicativos
    • Clique com o botão direito do mouse no grupo e selecione Add Row
    • Digite Permitir Cargas Arbitrárias
    • Defina o valor à direita como YES

Exemplo

Vincent
fonte
Para esclarecer: se "Permitir cargas arbitrárias" for SIM e houver "Domínios de exceção", as cargas permitidas serão restritas às dos Domínios de exceção. Isso está correto?
essa é uma maneira segura de fazer isso se eu quiser liberar o aplicativo?
Lamour
Não. Ao permitir carregamentos arbitrários, seu aplicativo pode se conectar a qualquer domínio livremente. Do ponto de vista da segurança, você deve controlar e limitar a qual domínio / site o aplicativo deve se conectar, para evitar o uso inesperado da rede.
Raptor
A maioria dos aplicativos é roteada apenas para servidores conhecidos. Isso é controlado pelo desenvolvedor. Portanto, os problemas de segurança são conhecidos.
Vincent Vincent
Por que está NSAllowsArbitraryLoadsdefinido como YES? Você subverte o objetivo do ATS. Consulte também O código mais perigoso do mundo: validando certificados SSL em software que não seja o navegador . Seu software acabou de entrar na lista.
J6
25

Documento 1 da Apple

Documento 2 da Apple

Existem duas soluções para isso:

Soluções 1:

  1. No Info.plistarquivo, adicione um dicionário com a chave ' NSAppTransportSecurity'
  2. Adicione outro elemento dentro do dicionário com a chave 'Allow Arbitrary Loads'

Plist estrutura deve aparecer como mostrado na imagem abaixo.

Solução 1

Solução 2:

  1. No Info.plistarquivo, adicione um dicionário com a chave ' NSAppTransportSecurity'
  2. Adicione outro elemento dentro do dicionário com a chave ' NSExceptionDomains'
  3. Adicionar elemento com chave 'MyDomainName.com'do tipo NSDictionary
  4. Adicione elemento com a chave ' NSIncludesSubdomains' do tipo Booleane valor definido comoYES
  5. Adicione elemento com a chave ' NSTemporaryExceptionAllowsInsecureHTTPLoads' do tipo Booleane valor definido comoYES

Plist estrutura deve aparecer como mostrado na imagem abaixo.

Solução 2

A solução 2 é preferida, pois permite apenas o domínio selecionado, enquanto a solução 1 permite todas as conexões HTTP inseguras.

Jayprakash Dubey
fonte
Por que está NSAllowsArbitraryLoadsdefinido como YES? Você subverte o objetivo do ATS. Consulte também O código mais perigoso do mundo: validando certificados SSL em software que não seja o navegador . Seu software acabou de entrar na lista.
JWW
20

A segurança de transporte está disponível no iOS 9.0 ou posterior. Você pode receber este aviso ao tentar chamar um WS dentro do seu aplicativo:

O Application Transport Security bloqueou um carregamento de recurso HTTP (http: //) em texto não criptografado, pois é inseguro. Exceções temporárias podem ser configuradas através do arquivo Info.plist do seu aplicativo.

Adicionar o seguinte ao seu Info.plist desativará o ATS:

<key>NSAppTransportSecurity</key>
<dict>
     <key>NSAllowsArbitraryLoads</key><true/>
</dict>
Malek Belkahla
fonte
1
NSAllowsArbitraryLoads deve ser falso, se for verdade ele permite que toda a conexão insegura
Thiago Arreguy
adicionando no plist todos os serviços web funcionando bem, exceto um serviço web de erro de retorno serviço de servidor interno um web (500) em iOS 9, mas funcionando bem em iOS8 ou mais tarde
Amit Gupta
1
Aceito na loja?
Vrashabh Irde 23/09
Péssimo conselho; consulte O código mais perigoso do mundo: validando certificados SSL em software que não seja do navegador . Dada a pergunta, se estiver cheia da maneira recomendada de fazer as coisas, respostas "eu também" como essa não são necessárias.
JWW
15

Exemplo de Desenvolvimento

Aqui está uma captura de tela de um plist que mantém o ATS intacto (= seguro), mas permite que as conexões com o host local possam ser feitas via HTTP em vez de HTTPS . Funciona no Xcode 7.1.1.

Digite a descrição da imagem aqui

Sebastian
fonte
Existem maneiras de tornar o localhost seguro, ou seja, usando HTTPS, no react-native, para que não tenhamos que usar a NSExceptionAllowsInsecureHTTPLoads - YESconfiguração padrão ?
precisa saber é o seguinte
13

Vá para o seu Info.plist

  1. Clique com o botão direito do mouse no espaço vazio e clique em Adicionar linha
  2. Escreva o nome da chave como NSAppTransportSecurity, abaixo dele
  3. Selecione Domínios de exceção, Adicione um novo item a este
  4. Anote seu nome de domínio que precisa ser acessado
  5. Altere o tipo de domínio de String para Dictionary, adicione um novo Item
  6. NSTemporaryExceptionAllowsInsecureHTTPLoads, que será um booleano com um valor verdadeiro. Olhe para a imagem para segui-la corretamente
Shailendra Suriyal
fonte
1
Por que está NSAllowsArbitraryLoadsdefinido como true? Você subverte o objetivo do ATS. Consulte também O código mais perigoso do mundo: validando certificados SSL em software que não seja o navegador . Seu software acabou de entrar na lista.
JWW
13

Segundo a Apple, geralmente a desativação do ATS levará à rejeição de aplicativos, a menos que você tenha um bom motivo para fazê-lo. Mesmo assim, você deve adicionar exceções para domínios que você pode acessar com segurança.

A Apple possui uma excelente ferramenta que informa exatamente quais configurações usar: No Terminal, digite

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

O nscurl verificará se essa solicitação falhará e, em seguida, tente várias configurações e informará exatamente qual delas é aprovada e o que fazer. Por exemplo, para alguns URLs de terceiros que visito, este comando me disse que esse dicionário é aprovado:

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

Para distinguir entre seus próprios sites e sites de terceiros que estão fora de seu controle, use, por exemplo, a chave NSThirdPartyExceptionRequiresForwardSecrecy.

gnasher729
fonte
1
é uma ótima ferramenta para verificar antes de testar com o aplicativo. economizar tempo. mas qualquer recurso para ler para entender a saída deste comando.
damithH
1
Ferramenta interessante. No meu caso, porém, exagera as coisas. Ele lista três chaves NSExceptionAllowsInsecureHTTPLoads = true;, incluindo , mas acontece que não é necessário.
Chris Príncipe
11

Descobrir quais configurações usar podem ser executadas automaticamente, conforme mencionado nesta nota técnica :

/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com
ecotax
fonte
Você precisa do OS X 10.11 (El Capitan) para isso, aparentemente.
Ecotax #
10

NOTA: O domínio de exceção no seu plist deve estar em LOWER-CASE.

Exemplo: você nomeou sua máquina como "MyAwesomeMacbook" em Configurações-> Compartilhamento; seu servidor (para fins de teste) está sendo executado em MyAwesomeMacbook.local: 3000 e seu aplicativo precisa enviar uma solicitação para http: //MyAwesomeMacbook.local: 3000 / files ..., sua lista, você precisará especificar "myawesomemacbook. local "como o domínio de exceção.

-

Seu info.plist conteria ...

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

Usar:

PList Screenshot para entender melhor

Adicione um novo item, NSAppTransportSecurity , no arquivo plist com o tipo Dictionary , depois adicione o subitem NSAllowsArbitraryLoads no dicionário do tipo Booleano e defina o valor booleano YES . Isso funciona para mim.

Tejinder
fonte
1
NSAllowsArbitraryLoads deve ser falso, se for verdade ele permite que toda a conexão insegura
Thiago Arreguy
adicionando no plist todos os serviços web funcionando bem, exceto um serviço web retorno um serviço web erro interno do servidor (500) no iOS 9, mas funcionando bem em iOS8 ou mais tarde @ThiagoArreguy
Amit Gupta
Péssimo conselho; consulte O código mais perigoso do mundo: validando certificados SSL em software que não seja do navegador . Dada a pergunta, se estiver cheia da maneira recomendada de fazer as coisas, respostas "eu também" como essa não são necessárias.
JWW
Sei que é um péssimo conselho, mas é apenas uma solução, por enquanto, apenas no modo de desenvolvimento. A Apple nos deu flexibilidade, se é tão ruim assim, eles não permitiriam isso.
TJinder
9

Em 25/09/2015 (após as atualizações do Xcode em 18/09/2015):

Eu usei um método não preguiçoso, mas não funcionou. As seguintes são minhas tentativas.

Primeiro,

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

E em segundo lugar,

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

Por fim, usei o método preguiçoso:

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

Pode ser um pouco inseguro, mas não consegui encontrar outras soluções.

Heedoo
fonte
Por que está NSAllowsArbitraryLoadsdefinido como true? Você subverte o objetivo do ATS. Consulte também O código mais perigoso do mundo: validando certificados SSL em software que não seja o navegador . Seu software acabou de entrar na lista.
JWW
9

No swift 4 e no xocde 10, altere NSAllowsArbitraryLoads para permitir cargas arbitrárias. então será assim:

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

Vale a pena mencionar como chegar lá ...

Info.plist é um dos arquivos abaixo do Main.storyboard ou viewController.swift.

Quando você clica nele pela primeira vez, geralmente ele está no formato de tabela; portanto, clique com o botão direito do mouse no arquivo e 'abra como' Código-fonte e adicione o código abaixo no final, ou seja:

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

Copie e cole o código logo acima

 "</dict>
</plist>"

que está no fim.

Naishta
fonte
Por que está NSAllowsArbitraryLoadsdefinido como true? Você subverte o objetivo do ATS. Consulte também O código mais perigoso do mundo: validando certificados SSL em software que não seja o navegador . Seu software acabou de entrar na lista.
J6
5

Atualização para o Xcode 7.1, enfrentando o problema 27.10.15:

O novo valor no Info.plist é "Configurações de segurança de transporte de aplicativos". A partir daí, este dicionário deve conter:

  • Permitir cargas arbitrárias = SIM
  • Domínios de exceção (insira aqui seu domínio http)
MkaysWork
fonte
4

Para aqueles que vieram aqui tentando descobrir o motivo pelo qual o WKWebView é sempre branco e não carrega nada (exatamente como descrito aqui, como faço para que o WKWebView funcione rapidamente e para um aplicativo macOS ):

Se toda a ciência do foguete acima não funcionar, verifique o óbvio: as configurações da sandbox

configurações de sandbox]

Sendo novo no Swift e no cacau, mas bastante experiente em programação, passo cerca de 20 horas para encontrar esta solução. Nenhuma das dezenas de tutoriais de hipster para iOS nem notas-chave da apple - nada menciona essa pequena caixa de seleção.

Alekseev Vladimir
fonte
Oh meu Deus, muito obrigado! Você me salvou a mesma pesquisa de 20 horas!
Brecht Machiels
2
não vendo essa seção na seção Recursos do destino (Xcode 9.4.1)
shim
3

Por padrão, o iOS permite apenas a API HTTPS. Como o HTTP não é seguro, você precisará desativar a segurança de transporte de aplicativos. Há duas maneiras de desativar o ATS:

1. Adicionando código-fonte no projeto info.plist e adicione o seguinte código na tag raiz.

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

2. Usando informações do projeto.

Clique no projeto no painel esquerdo, selecione o projeto como destino e escolha a guia Informações. Você precisa adicionar o dicionário na seguinte estrutura.

insira a descrição da imagem aqui

varunrathi28
fonte
3

Como corrigi-lo?

insira a descrição da imagem aqui

Abaixo as etapas para corrigi-lo.

insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui

Kamani Jasmin
fonte
1

O uso NSExceptionDomainspode não aplicar um efeito simultaneamente, pois o site de destino pode carregar recursos (por exemplo, jsarquivos) de domínios externos http. Isso pode ser resolvido adicionando esses domínios externos NSExceptionDomainstambém.

Para inspecionar quais recursos não podem ser carregados, tente usar a Depuração remota. Aqui está um tutorial: http://geeklearning.io/apache-cordova-and-remote-debugging-on-ios/

Nurlan Akashayev
fonte
0

Para o Cordova, se você quiser adicioná-lo ao seu ios.json, faça o seguinte:

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

E deve estar dentro de:

"*-Info.plist": {
   "parents": {
   }
}
zeusstl
fonte
Apenas <access origin = "*" /> no config.xml não funcionou. Não tenho certeza se ambos são necessários, mas a solução ios.json selou o acordo para mim.
precisa saber é o seguinte
Por que está NSAllowsArbitraryLoadsdefinido como true? Você subverte o objetivo do ATS. Consulte também O código mais perigoso do mundo: validando certificados SSL em software que não seja o navegador . Seu software acabou de entrar na lista.
JWW
-1

Como muitos observaram, esse é um problema de recurso que vem com o iOS 9.0. Eles adicionaram uma coisa chamada App Transport Security, e eu também fiquei chateado quando ele quebrou meus aplicativos.

Você pode fazer um curativo com a chave NSAllowsArbitraryLoads para YES no dicionário NSAppTransportSecurity em seu arquivo .plist, mas, em última análise, será necessário reescrever o código que forma seus URLs para formar o prefixo HTTPS: //.

A Apple reescreveu a classe NSUrlConnection no iOS 9.0. Você pode ler sobre isso em NSURLConnection .

Caso contrário, talvez você precise sair do iOS 9.0 até ter tempo para implementar a solução correta.

Mark DeWald
fonte