web-dev-qa-db-fra.com

Le certificat pour ce serveur n'est pas valide

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 =

10
pa12

vous ne pouvez pas le réparer avec la façon dont vous essayez

  • soit vous passez à CFNetworking pour autoriser les mauvais certificats
  • utiliser NSConnection avec un délégué et une méthode undoc'd
  • utiliser l'API privée que vous avez trouvée

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 

3
Daij-Djan

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];
    }
}
8

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;
4
skywinder

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.

1
prajothdsa

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/

0
am6sigma

S'il vous plaît vérifier le lien suivant.

https://discussions.Apple.com/thread/4912924?start=0&tstart=0

0
Bera Bhavin

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

0
arunjos007