“non fiables certificat de serveur” sur iPhone
Je suis en train d'écrire une application iPhone et je tiens à vous connecter à un "HTTPS" serveur pour obtenir de l'information. Cependant, je reçois le message d'erreur dans la console qui est
NSUnderlyingError = Erreur de Domaine=kCFErrorDomainCFNetwork Code=-1202
UserInfo=0x3e95cf0 "Le certificat pour ce serveur n'est pas valide. Vous
peut se connecter à un serveur qui est de faire semblant d'être “example.com”
qui pourrait mettre vos informations confidentielles à risque."; }
Comment puis-je faire confiance au certificat et obtenir le code d'état http 200
Voici mon code.
NSMutableURLRequest *request_get2 = [[[NSMutableURLRequest alloc] init] autorelease];
[request_get2 setURL:[NSURL URLWithString:@"https://www.example.com"]];
[request_get2 setHTTPMethod:@"GET"];
[request_get2 setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
//[request_get2 setValue:@"text/html; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
[request_get2 setValue:@"https://www.example.com" forHTTPHeaderField:@"Referer"];
[request_get2 setHTTPShouldHandleCookies:YES];
//cookiesString is in format "cookieName=cookieValue;"
[request_get2 setValue: (NSString *) cookiesString forHTTPHeaderField:@"Cookie"];
//doGet - response
NSHTTPURLResponse *response_get2 = nil; //it change from 'NSURLRespaonse' to 'NSHTTPURLResponse'
NSError *error_get2 = nil;
NSData *responseData_get2 = [NSURLConnection sendSynchronousRequest:request_get2 returningResponse:&response_get2 error:&error_get2];
NSString *data_get2 = [[NSString alloc]initWithData:responseData_get2 encoding:NSUTF8StringEncoding];
if (!error_get2) {
NSString *responseURL_get2 = [[response_get2 URL] absoluteString]; //null value
NSString *responseTextEncodingName_get2 = [response_get2 textEncodingName]; //null value
NSString *responseMIMEType_get2 = [response_get2 MIMEType]; //null value
NSUInteger *responseStatusCode_get2 = [response_get2 statusCode]; //[responseStatusCode intValue]; //the status code is 0
}
else {
NSLog(@"\nsomething went wrong: %@\n", [error_get2 userInfo]); //got the error in here
}
Vous devez vous connecter pour publier un commentaire.
Je pense que l'ajout d'un certificat non approuvé (au moins dans le simulateur) n'est pas possible, mais vous pouvez dire à votre NSURLConnection Délégué à accepter les certificats auto-signés (ou plus généralement non approuvés)
Le lien suivant m'a aidé à résoudre le problème!
Comment utiliser NSURLConnection pour se connecter avec le protocole SSL pour un non approuvés cert?
Faire confiance à tous les certificats est une très mauvaise idée. Une personne malveillante peut effectuer une Man-in-the-Middle attaque à vos utilisateurs de lire ou de modifier toutes les données transférées.
Je crois que votre certificat ne contient pas tous les certificats intermédiaires nécessaires pour valider le chemin d'accès à un système de certification racine de confiance. Il peut être signalé comme incomplète de la chaîne de certification par certaines configuration SSL de validation des outils.
Vous pouvez résoudre le incomplète de la chaîne de certification problème manuellement par la concaténation de tous les certificats à partir du certificat de le certificat racine de confiance (exclusive, dans cet ordre), afin de prévenir de tels problèmes. Remarque, le certificat racine de confiance ne devrait pas être là, car il est déjà inclus dans le système de la racine magasin de certificats.
Vous devriez être en mesure de récupérer les certificats intermédiaires de l'émetteur et concat ensemble par vous-même. J'ai écrit un script pour automatiser la procédure, il faut un certificat pour produire une sortie de correctement enchaîné les certificats. https://github.com/zakjan/cert-chain-resolver