使用Zend Http请求和响应检索SSL证书

问题描述:

我正在尝试连接到第三方API,并且正在使用Zend 1.7.0框架来访问它。要进行身份验证,我必须首先检查从URL返回的SSL证书。这就是我在我的代码中所做的。使用Zend Http请求和响应检索SSL证书

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

的反应总是好的,当我浏览到“$网址”我可以看到证书,如果我点击我的浏览器窗口的右下角的锁。

是否有方法通过响应对象访问证书的所有者,到期日期和其他属性?在发送获取证书信息之前,我是否必须对请求做任何特殊处理?

我不认为Zend_Http_Client使用标准连接适配器是可能的。我做了一些挖掘,它看起来像适配器使用fsockopen这几乎隐藏了你要找的东西。做到这一点的方法是自己打开插座,并获得证书第一:

$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

这明确地带领我在正确的方向。非常感谢!你在哪里找到这个代码?我GOOGLE了它,这个页面成为最高指标。 – 2009-09-30 17:43:25

+0

我不得不围着很多地方打猎。我最终在新闻组帖子中发现了一些代码,可以提取证书,然后单独显示如何提取公钥,php.net openssl文档显示如何获取信息。其余的是试错。 我应该真的联系到消息来源,但我不记得我到底在哪找到他们。 – Neel 2009-09-30 22:34:25