2011-02-24 4 views
4

J'aimerais pouvoir obtenir le certificat ssl (+ chaîne si possible) pour pouvoir afficher le nom distinctif et déterminer s'il s'agit d'un certificat EV. (Détection certs EV par les politiques de certificat (wikipedia)Comment récupérer le certificat du serveur SSL dans iOS?

D'après ce que je vous ai vu obtenir présenté seulement quelques détails du certificat si le certificat est auto-signé.

Est-il possible en utilisant des couches inférieures comme CFNetwork pour récupérer le certificat (s)?

Répondre

9

via le macnetworkprog.lists.apple.com liste de diffusion http://web.archiveorange.com/archive/v/x0fiWEI9emJFc36DY0UP et a mentionné quelques endroits dans les développeurs Forums

Eh bien, la valeur par défaut la politique de sécurité TLS devrait être suffisant, mais si vous voulez vous impliquer dans ce processus, vous pouvez le faire (sur iPhone OS 3.0 et versions ultérieures, et Mac OS X 10.6) mettant en œuvre le -connection:canAuthenticateAgainstProtectionSpace: et -connection:didReceiveAuthenticationChallenge: rappels de délégué, à la recherche d'une méthode d'authentification NSURLAuthenticationMethodServerTrust .

Pour ce faire:

  1. Mettre en oeuvre le rappel de délégué -connection:canAuthenticateAgainstProtectionSpace:.

  2. Dans votre mise en œuvre, si la méthode d'authentification de l'espace de protection est NSURLAuthenticationMethodServerTrust, vous avez deux choix:

    2a. Retournez NO, et laissez l'algorithme TLS par défaut entrer en action.

    2b. Renvoie YES, auquel cas votre rappel de délégué -connection:didReceiveAuthenticationChallenge: sera appelé.

Si vous voulez regarder les certificats avant de prendre cette décision, vous pouvez appeler -serverTrust sur l'objet de l'espace de protection pour obtenir un objet de confiance, puis utilisez la API SecTrust pour obtenir le chaîne de certificats.

  1. Si vous prenez chemin 2b, votre rappel -connection:didReceiveAuthenticationChallenge: délégué sera appelé. Vous avez deux choix:

    3a. Interdire la connexion en appelant le -cancelAuthenticationChallenge: sur l'expéditeur du challenge.

    3b. Autoriser la connexion en appelant -useCredential:forAuthenticationChallenge: sur l'expéditeur du challenge. Pour obtenir un justificatif d'identité, appelez le -[NSURLCredential initWithTrust:]. Peu importe quel objet de confiance vous passez ici; celui de l'espace de protection fera l'affaire.

Vous n'avez pas besoin de faire cela de manière synchrone.Vous pouvez simplement verrouiller le défi et revenir de votre rappel de délégué, puis résoudre le défi à un moment donné dans le futur.