iOS 8 a cassé connexion SSL dans mon app - CFNetwork SSLHandshake échoué (-9806)
Mon application se connecte simplement à un serveur web sur un appareil à la maison et lit le code html.
Il fonctionne très bien lors de l'utilisation de http, mais maintenant sur iOS 8 lors de l'utilisation de https, il ne fonctionne pas.
- Je utiliser AFNetworking
v1 et remplacer le SSL vérifie à l'aide de ces supplanter les méthodes (Oui, je sais que dans des circonstances normales, cela ne devrait pas être fait et est dangereux etc.., mais c'est un autre sujet).
[self setAuthenticationChallengeBlock:^(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge) {
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
}
}];
[self setAuthenticationAgainstProtectionSpaceBlock:^BOOL(NSURLConnection *connection, NSURLProtectionSpace *protectionSpace) {
if([[protectionSpace authenticationMethod] isEqualToString:NSURLAuthenticationMethodServerTrust]) {
return YES; //Self-signed cert will be accepted
}
//If no other authentication is required, return NO for everything else
//Otherwise maybe YES for NSURLAuthenticationMethodDefault and etc.
return NO;
}];
Maintenant avec iOS 8, j'obtiens une erreur comme ceci:
CFNetwork SSLHandshake échoué (-9806)
CFNetwork SSLHandshake échoué (-9806)
CFNetwork SSLHandshake échoué (-9806)
NSURLConnection/CFURLConnection HTTP échec de chargement (kCFStreamErrorDomainSSL, -9806)
Erreur lors de la connexion: Erreur de Domaine=NSURLErrorDomain Code=-1200 "Une erreur SSL a eu lieu et d'une connexion sécurisée au serveur ne peut pas être fait." UserInfo=0x7b66c110 {NSLocalizedDescription=Une erreur SSL a eu lieu et d'une connexion sécurisée au serveur ne peut pas être fait., NSLocalizedRecoverySuggestion=souhaitez-vous vous connecter au serveur de toute façon?, _kCFStreamErrorCodeKey=-9806, NSErrorFailingURLStringKey=https://xxx.xxx.xxx.xxx:443/live.htm, _kCFStreamErrorDomainKey=3, NSUnderlyingError=0x7c0d8a20 "Une erreur SSL a eu lieu et d'une connexion sécurisée au serveur ne peut pas être fait.", NSErrorFailingURLKey=https://xxx.xxx.xxx.xxx:443/Info.live.htm}
J'ai essayé de changer à FSNetworking, et il sometimes
œuvres lors de la définition:
- (void)connection:(NSURLConnection *)connection
willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
if([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])
{
NSLog(@"Ignoring SSL");
SecTrustRef trust = challenge.protectionSpace.serverTrust;
NSURLCredential *cred;
cred = [NSURLCredential credentialForTrust:trust];
[challenge.sender useCredential:cred forAuthenticationChallenge:challenge];
return;
}
}
Cependant faire 2 simultanée de la demande, à seulement 1 réussisse et que l'on va échouer avec une erreur similaire à ci-dessus. Seulement 1 demande semble atteindre le SSL remplacer le point.
Quelqu'un peut s'il vous plaît faire la lumière sur ce et quoi de changé dans iOS 8 pour briser ce et comment je peux éventuellement le réparer?
Grâce
OriginalL'auteur Darren | 2014-09-18
Vous devez vous connecter pour publier un commentaire.
J'ai couru dans le même genre de problème avec iOS 8.
Scénario:
UIWebView
NSURLConnection
s échouer avec unSSLHandshake
erreuruseCredential:forAuthenticationChallenge
a été la cause de cette erreur (mais seulement après l'ouverture d'une page en https hébergé sur le même serveur) quand nous l'avons appelé SecTrust* méthodes de droit après.Ce code a déclenché l'erreur:
Mais celui-ci n'a pas:
Il n'est pas clair pour moi pourquoi c'était à l'origine du
SSLHandshake
échouer sur iOS 8, mais pas l'iOS 7. Peut-être AFNetworking fait quelque chose aprèsuseCredential:forAuthenticationChallenge
qui est à l'origine le même problème.OriginalL'auteur Simon Watiau
L'erreur que vous voyez peuvent être trouvés dans
SecureTransport.h
. C'est une erreur de niveau transport: la connexion a échoué parce qu'elle a été abandonnée.Un certain nombre de choses qui pourraient être la cause, à la fois le client et le serveur. Ceci est plus susceptible de se produire si le serveur demande au client une demande de certificat et le client ne fournit pas, à ce point, le serveur décide de l'abandonner. Si le serveur demande au client un certificat, votre délégué méthode devrait voir une tentative de s'authentifier à l'aide d'un certificat du client en plus du serveur de confiance.
Il semble que je ne fait la ssl du côté de choses à travailler. Bien que je reçois le SSLHandshake l'Échec des messages, j'ai réussi a se connecter sans passer par la ssl comme dans ma question. La raison pourquoi il ne fonctionne parfois je pense que c'est dû à cette github.com/AFNetworking/AFNetworking/issues/...
OriginalL'auteur quellish