2009-09-23 10 views
2

J'essaie de me connecter à une API tierce et j'utilise le framework Zend 1.7.0 pour y accéder. Pour m'authentifier, je dois d'abord vérifier un certificat SSL renvoyé par une URL. C'est ce que je fais dans mon code.Récupérer le certificat SSL avec Zend Http Demande et réponse

$client = new Zend_Http_Client($url); 
$response = $client->request('GET'); 

La réponse est toujours OK, et lorsque je navigue à « $ url » je peux voir le certificat si je clique sur le verrou dans le coin en bas à droite de ma fenêtre du navigateur.

Existe-t-il un moyen d'accéder au propriétaire du certificat, à la date d'expiration et à d'autres propriétés via l'objet de réponse? Dois-je faire quelque chose de spécial à la demande avant de l'envoyer pour obtenir les informations sur le certificat?

Répondre

2

Je ne pense pas que ce soit possible avec l'adaptateur de connexion standard utilisé par Zend_Http_Client. J'ai fait un peu de creusage et il semble que l'adaptateur utilise fsockopen qui cache à peu près ce que vous cherchez. La façon de le faire est d'ouvrir le socket vous-même et obtenir le certificat d'abord:

$url = 'mail.google.com'; // For example 
$context = stream_context_create(); 
$res = stream_context_set_option($context, 'ssl', 'capture_peer_cert', true); 
$res = stream_context_set_option($context, 'ssl', 'verify_host', true); 
if ($socket = stream_socket_client("tls://$url:443/", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context)) { 
    if ($options = stream_context_get_options($context)) { 
     if (isset($options['ssl']) && isset($options['ssl']['peer_certificate'])) { 
      $keyinfo = openssl_x509_parse($options[$wrapper]['peer_certificate']); 
      var_dump($keyinfo); 
     } 
    } 
    fclose($fp); 
} 
+0

Cela m'a définitivement conduit dans la bonne direction. Merci beaucoup! Où avez-vous trouvé ce code? Je l'ai googlé et cette page est apparue comme l'indice le plus élevé. –

+0

J'ai dû beaucoup chasser. J'ai finalement trouvé un peu de code dans un article de newsgroup qui pouvait extraire le certificat puis un autre qui montrait comment extraire la clé publique, les docs openssl de php.net montraient comment obtenir l'info. Le reste était un essai et une erreur. Je devrais vraiment revenir aux sources mais je ne me souviens plus où je les ai toutes trouvées. – Neel

Questions connexes