2010-10-11 7 views
2

Comment puis-je détecter un certificat auto-signé d'un certificat révoqué ou expiré?Évaluation du certificat de serveur

J'utilise NSURLConnection et connexion mise en œuvre: didReceiveAuthenticationChallenge: le délégué:

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge{ 
    if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]){ 
     NSURLProtectionSpace *tmpSpace=[challenge protectionSpace]; 
     SecTrustRef currentServerTrust=[tmpSpace serverTrust]; 
     SecTrustResultType trustResult; 
     OSStatus err = SecTrustEvaluate(currentServerTrust, &trustResult); 
     BOOL trusted = (err == noErr) && ((trustResult == kSecTrustResultProceed) ||           (trustResult == kSecTrustResultUnspecified)); 
     if (trusted){ 
      // Do something 
     } 
    } 
} 

Actuellement, le « if (confiance) {} » bloc ne fonctionne que pour les certificats de confiance par iOS, je veux travailler pour d'autres aussi, mais seulement si le certificat n'est pas révoqué ou expiré.

La documentation utilise SecTrustSettingsSetTrustSettings pour modifier les paramètres et réévaluer l'approbation. mais je ne pouvais pas trouver cette méthode (ou le SecTrustSetting) pour iOS, seulement pour Mac.

Merci

Répondre

0

Pour l'évaluation de la confiance pour réussir,

  1. vous devez avoir l'ancre (racine CA cert) intalled sur l'appareil. Ou, vous spécifiez une ancre lors de l'exécution à l'aide SecTrustSetAnchorCertificates().

Dans les deux cas, vous devez avoir accès au certificat d'ancrage.