alguém com o iOS 9 beta 1 teve esse problema?
Eu uso o padrão NSURLConnection para conectar-se a um serviço da web e, assim que uma chamada é feita, eu recebo o erro abaixo. No momento, está funcionando no iOS 8.3
Possível bug beta? quaisquer idéias ou pensamentos seriam ótimos! Eu sei que é muito cedo no desenvolvimento do iOS 9
Aqui está o erro completo:
CFNetwork SSLHandshake falhou (-9824) NSURLSession / NSURLConnection falha no carregamento HTTP (kCFStreamErrorDomainSSL, -9824)
NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://mywebserviceurl"]];
NSURLResponse * response = nil;
NSError * error = nil;
NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];
fonte
No iOS 10+, a string TLS DEVE estar no formato "TLSv1.0". Não pode ser apenas "1.0". (Suspiro)
A seguinte combinação das outras respostas funciona.
Digamos que você esteja tentando se conectar a um host (YOUR_HOST.COM) que tenha apenas o TLS 1.0.
Adicione-os ao Info.plist do seu aplicativo
fonte
NSTemporaryExceptionRequiresForwardSecrecy
fez o truque para mim, obrigado!Para obter mais informações: Configurando exceções de segurança do App Transport no iOS 9 e OSX 10.11
Este envio de um aplicativo com segurança de transporte de aplicativos abrange algumas boas dicas de depuração
Falha no ATS
CFNETWORK_DIAGNOSTICS
nscurl
fonte
Se o seu back-end usa uma conexão segura e você obtém o NSURLSession
você precisa verificar a configuração do servidor, especialmente para obter a versão ATS e o certificado SSL.
Em vez de apenas Permitir conexão insegura por meio da configuração
NSExceptionAllowsInsecureHTTPLoads = YES
, é necessário Permitir segurança reduzida , caso o servidor não atenda ao requisito mínimo (v1.2) do ATS (ou melhor, para corrigir o lado do servidor).Permitindo segurança reduzida para um único servidor
use o cliente openssl para investigar o certificado e obtenha a configuração do servidor usando o cliente openssl:
..Encontre no final
O App Transport Security (ATS) requer o protocolo TLS (Transport Layer Security) versão 1.2.
Requisitos para conectar usando o ATS:
Atualização: verifica-se que o openssl fornece apenas a versão mínima do protocolo Protocolo: links TLSv1
fonte
Depois de dois dias de tentativas e fracassos, o que funcionou para mim é esse código de confusão
com uma alteração, de acordo com este post , devemos parar de usar subchaves associadas ao dicionário NSExceptionDomains desse tipo de convenção
E usar na nova Convenção
em vez de.
documentação da apple
meu código
fonte
Outra ferramenta útil é o nmap (brew install nmap)
Dá saída
fonte
Às vezes, esse erro aparecia nos logs quando eu estava usando uma versão iOS do Cordova com falha / com falha. Ele desapareceu quando eu atualizei ou desativei o cordova iOS.
O servidor ao qual estava me conectando estava usando o TLSv1.2 SSL, então sabia que não era esse o problema.
fonte
No seu
.plist
arquivo de projeto , adicione esta permissão:fonte
A sintaxe da configuração do Info.plist
fonte
Resposta atualizada (pós-WWDC 2016):
O App Transport Security, ou ATS, é um recurso que a Apple introduziu no iOS 9. Quando o ATS é ativado, ele força um aplicativo a se conectar aos serviços da Web por uma conexão HTTPS em vez de HTTP não seguro.
No entanto, os desenvolvedores ainda podem desativar o ATS e permitir que seus aplicativos enviem dados por uma conexão HTTP, conforme mencionado nas respostas acima. No final de 2016, a Apple tornará o ATS obrigatório para todos os desenvolvedores que esperam enviar seus aplicativos para a App Store. ligação
fonte
O dispositivo em que testei estava com o horário errado. Portanto, quando tentei acessar uma página com um certificado que acabaria em breve, ele negaria o acesso porque o dispositivo, embora o certificado tivesse expirado. Para corrigir, defina a hora adequada no dispositivo!
fonte