kCFStreamErrorDomainSSL,-9802 ao conectar-se a um servidor por endereço IP por meio de HTTPS no iOS 9



iphone afnetworking (4)

Temos um aplicativo iOS que se conecta ao nosso servidor por HTTPS. Quando o aplicativo é criado com o novo iOS 9 SDK e executado no iOS 9, ocorre o seguinte erro:

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)

O aplicativo usa o AFNetworking 1.3.4 com certificados fixados. O problema ocorre se eu conectar ao servidor com seu endereço IP. Funciona se eu adicionar a configuração NSAllowsArbitraryLoads ou se eu conectar ao servidor com seu nome de domínio.

O conector do Tomcat é configurado com sslEnabledProtocols = "TLSv1, TLSv1.1, TLSv1.2".

Eu tentei substituir o nome do host, mas ele não parece mudar nada.

Ainda não consigo encontrar muita documentação oficial sobre o ATS. Talvez a conexão com o endereço IP não deva funcionar?

https://ffff65535.com



Fiquei preso por um tempo e tentei todos os truques no Info.plist, mas ainda tinha o erro:

HTTP load failed (kCFStreamErrorDomainSSL, -9813)

ao tentar conectar-se a um servidor localhost em desenvolvimento.

Desenvolvendo localmente com um projeto nativo de reação que se conecta a uma API servida com um certificado autoassinado, meu sistema estava configurado para confiar no certificado, mas demorei um pouco para perceber que eu também precisava do simulador IOS para aceitar meu certificado como confiável para superar esse erro.

Na tela inicial do seu simulador, você poderá arrastar o arquivo cert para o simulador, solicitando que ele adicione o perfil do certificado. Ou, se o certificado estiver acessível através de um URL de host local no navegador de safári do simulador, você poderá aceitá-lo através do safari.

Espero que isso ajude alguém enquanto eu andava em círculos antes de clicar para mim!


Você pode adicionar isso no seu arquivo " Info.plist ", pois permitirá conexões não seguras:

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

Solução 1:

Se você estiver procurando uma work around , use a abordagem abaixo:

  1. Adicione a chave NSAllowsArbitraryLoads do tipo booleano com o valor true .

Seu arquivo Info.plist deve ficar assim:

No entanto, essa abordagem não é recomendada, pois permite todas as conexões não seguras.

Solução 2:

O SSL certificate that you apply on Server should be of type TLSv2.0 minimum since iOS 10 requires this. Verifique este link para obter detalhes.

  1. Adicione a chave NSIncludesSubdomains do tipo boolean com valor true
  2. Adicione a chave NSTemporaryExceptionAllowsInsecureHTTPLoads do tipo boolean com valor true
  3. Adicione a chave NSTemporaryExceptionMinimumTLSVersion do tipo String com o valor TLSv1.2

Seu arquivo Info.plist deve ficar assim:





app-transport-security