Je sais que si j'utilise nsurlconnectiondelate suivant, il sera corrigé
- connexion: willSendRequestForAuthenticationChallenge: – connexion: canAuthenticateAgainstProtectionSpace
Mais j'essaie d'utiliser
sendAsynchronousRequest: queue: completionHandler:
Donc, vous ne recevez pas le rappel. J'ai regardé dans Apple docs dit-il après
Si une authentification est requise pour télécharger la demande, les informations d'identification requises doivent être spécifiées dans l'URL. Si l'authentification échoue ou si des informations d'identification sont manquantes, la connexion tentera de continuer sans informations d'identification.
Je ne savais pas comment faire ça. Quand j'ai levé les yeux, tout ce que j'ai eu c'est cet appel privé
+ (void) setAllowsAnyHTTPSCertificate: (BOOL) inAllow forHost: (NSString *) inHost;
Une idée comment faire ça?
Voici l'erreur que je reçois
Le certificat pour ce serveur n'est pas valide. Vous pourriez vous connecter à un serveur prétendant être «exemple.com = 0x8b34da0 {NSErrorFailingURLStringKey = https://example.com/test/ , NSLocalizedRecoverySuggestion = Voulez-vous vous connecter au serveur malgré tout ?, NSErrorFailingURLKey = https://example.com/test/ , NSLocalizedDescription = Le certificat pour ce serveur n'est pas valide. Vous se connecte peut-être à un serveur prétendant être «exemple.com» qui pourrait mettre en péril vos informations confidentielles., NSUnderlyingError = 0xa26c1c0 "Le certificat de ce serveur est Invalide. Il est possible que vous vous connectiez à un serveur prétendant être “ Example.com ", ce qui pourrait compromettre vos informations confidentielles.", NSURLErrorFailingURLPeerTrustErrorKey =
vous ne pouvez pas le réparer avec la façon dont vous essayez
tout n'est pas bon. CFNetwork devrait être OK pour Apple pour le moment, mais les deux autres méthodes ne sont même pas compatibles avec les applications
Mieux faire réparer le serveur. C'est le plus facile et le plus propre
Le serveur Web que vous utilisez demande une authentification Server Trust. Vous devez répondre correctement en prenant les mesures appropriées. Vous devez implémenter la méthode déléguée connection:willSendRequestForAuthenticationChallenge:
et utiliser SecTrustRef pour l'authentifier.
Plus d'informations peuvent être trouvées ici: - https://developer.Apple.com/library/ios/technotes/tn2232/_index.html
C'était mon code pour corriger l'erreur:
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
NSURLProtectionSpace *protectionSpace = [challenge protectionSpace];
id<NSURLAuthenticationChallengeSender> sender = [challenge sender];
if ([[protectionSpace authenticationMethod] isEqualToString:NSURLAuthenticationMethodServerTrust])
{
SecTrustRef trust = [[challenge protectionSpace] serverTrust];
NSURLCredential *credential = [[NSURLCredential alloc] initWithTrust:trust];
[sender useCredential:credential forAuthenticationChallenge:challenge];
}
else
{
[sender performDefaultHandlingForAuthenticationChallenge:challenge];
}
}
Si vous utilisez AFNetworking
, vous pouvez utiliser ce code:
(Juste comme une solution côté client temporaire!)
AFHTTPSessionManager * apiManager = [AFHTTPSessionManager initWithBaseURL:[NSURL URLWithString:baseURL];
AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
policy.allowInvalidCertificates = YES;
apiManager.securityPolicy = policy;
Ce problème ne peut pas être résolu avec la façon dont vous essayez avec les blocs. vous devez définir des délégués et implémenter les délégués du défi d'authentification pour contourner la validation du certificat. La meilleure solution consiste à créer un bon certificat (assurez-vous qu’il n’est pas auto-signé) ou à changer le protocole en HTTP si cela vous convient.
C'est une erreur de certificat. vous devez modifier vos paramètres pour que votre programme/os ignore le certificat ou ajouter l'URL/le certificat à une liste de confiance.
Désolé, il s'agit d'une authentification, le certificat est une authentification. J'ai jeté un coup d'oeil et j'ai trouvé cet article.
Je ne sais pas si cela résoudra votre problème, mais il est indiqué en substance qu’ils ne couvrent pas le cas de la connexion à un site avec la manière dont un certificat est fourni dans la documentation.
http://www.cocoanetics.com/2009/11/ignoring-certificate-errors-on-nsurlrequest/
S'il vous plaît vérifier le lien suivant.
https://discussions.Apple.com/thread/4912924?start=0&tstart=0
Dans mon cas, cette erreur est survenue car mon pare-feu a bloqué l'URL requise. cela a bien fonctionné après la suppression des restrictions du pare-feu