2010-08-23 6 views
6

J'essaie actuellement de me connecter à un serveur avec un certificat auto-signé. J'utilise NSURLConnection pour me connecter au serveur. Comment puis-je m'assurer que je fais uniquement confiance au bon serveur et que j'annule toutes les autres connexions? J'utilise le code suivantImpossible de faire confiance à un certificat auto-signé sur l'iphone

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { 

    SecTrustResultType results; 
    SecTrustRef trust = [[challenge protectionSpace] serverTrust]; 

    SecTrustEvaluate(trust, &results); 

    if (results == kSecTrustResultProceed || results == kSecTrustResultConfirm) { 
     [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; 
    } else { 
     [challenge.sender cancelAuthenticationChallenge:challenge]; 
    } 

} 

Actuellement SecTrustEvaluate revient toujours avec des résultats égaux à kSecTrustResultRecoverableTrustFailure. J'ai installé un profil de configuration avec le certificat sur le téléphone en utilisant l'utilitaire de configuration iphone et il est marqué comme vérifié mais il n'a pas changé les résultats.

Quelqu'un peut-il m'aider à obtenir un résultat de confiance de kSecTrustResultProceed ou de kSecTrustResultConfirm pour un certificat auto-signé?

Répondre

4

Vous devez vous assurer que votre certificat a certaines extensions. J'ai configuré un certificat avec les extensions suivantes, et cela a fonctionné pour moi (format OpenSSL):

basicConstraints=critical,CA:FALSE 
extendedKeyUsage=serverAuth 
subjectAltName=IP:192.168.x.y 
+1

Belle pointe, cela fonctionne si vous obtenez ** kSecTrustResultRecoverableTrustFailure ** ... plus précisément sur la touche « subjectAltName » est très important. Si votre serveur répond par un DNS lorsqu'il est appelé, vous devez utiliser 'subjectAltName = DNS: example.com' ou si vous voulez' subjectAltName = IP: 10.0.1.5, DNS: example.com'. Merci ! – gwdp

Questions connexes