使用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);
}
这明确地带领我在正确的方向。非常感谢!你在哪里找到这个代码?我GOOGLE了它,这个页面成为最高指标。 – 2009-09-30 17:43:25
我不得不围着很多地方打猎。我最终在新闻组帖子中发现了一些代码,可以提取证书,然后单独显示如何提取公钥,php.net openssl文档显示如何获取信息。其余的是试错。 我应该真的联系到消息来源,但我不记得我到底在哪找到他们。 – Neel 2009-09-30 22:34:25