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

时间:2009-09-23 22:42:36

标签: php zend-framework ssl zend-http-client

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

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

响应总是正常,当我导航到'$ url'时,如果我点击浏览器窗口右下角的锁,我就能看到证书。

有没有办法通过响应对象访问证书的所有者,到期日期和其他属性?在发送请求之前,我是否必须对请求执行任何特殊操作以获取有关证书的信息?

1 个答案:

答案 0 :(得分:2)

我认为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);
}