2009-10-16 11 views
4

J'ai une application qui se connecte bien sur http. En essayant https j'ai eu l'erreur qui indique que le certificat de racine n'est pas approuvé. J'ai trouvé des URL pour mon certificat de site, son certificat d'autorité de certification et le certificat racine de l'autorité de certification et les ai ajoutées via Safari au téléphone. Maintenant, quand je vais à Préférences -> Général -> Profils, je peux voir tous mes certificats qui vont tout le long de la chaîne. Il y a une étiquette rouge non signée sur chaque certificat. Encore quand je me connecte je reçois l'erreur NSURLErrorServerCertificateUntrusted. J'essaie de comprendre où aller ensuite.HTTPS avec NSURLConnection - NSURLErrorServerCertificateUntrusted

Toute aide serait géniale. La seule autre chose qui peut affecter cela, c'est que je me connecte à un port étrange. Donc mon URL est www.domain.com:port. Le numéro de port crée-t-il un certificat - incompatibilité de nom de domaine? Maintenant, j'ai utilisé l'utilitaire de configuration de l'iPhone pour ajouter un profil de configuration au téléphone. Il a mon certificat racine, mon certificat ca et mon certificat de site. Le profil sur le téléphone indique qu'il est vérifié. Dans les détails, je peux voir mes trois certificats. Mais quand j'essaye de me connecter, j'obtiens toujours l'erreur de certificat non approuvée. Aucune suggestion? Vous essayez juste de voir si quelqu'un d'autre peut vous aider à résoudre ce problème?

Répondre

10

Il existe une API prise en charge pour ignorer les certificats incorrects lors des chargements NSURLConnection. Pour ce faire, il suffit d'ajouter quelque chose comme ceci à votre délégué NSURLConnection:

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace { 
    return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { 
    if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) 
    if (... user allows connection despite bad certificate ...) 
     [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; 

    [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge]; 
} 

Notez que la connexion: didReceiveAuthenticationChallenge: peut envoyer son message à challenge.sender (beaucoup) plus tard, après avoir présenté une boîte de dialogue à l'utilisateur si nécessaire , etc.

+1

Comment savez-vous quelle boîte de dialogue présenter? On dirait que vous pourriez obtenir ici des raisons autres que NSURLErrorServerCertificateUntrusted (comme NSURLErrorServerCertificateHasBadDate, ce qui, je suppose, signifie qu'il a expiré). –

+0

peut-on utiliser les méthodes ci-dessus pour ultra cassini? En ce moment j'utilise IIS et utilisé les méthodes ci-dessus pour le certificat non approuvé mais pour un cas particulier je dois également considérer ultra cassini. – Pooja

Questions connexes