Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Zend Http请求和响应检索SSL证书_Php_Zend Framework_Ssl_Zend Http Client - Fatal编程技术网

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

Php 使用Zend Http请求和响应检索SSL证书,php,zend-framework,ssl,zend-http-client,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”时,如果单击浏览器窗口右下角的锁,我可以看到证书 是否有办法通过响应对象访问证书的所有者、过期日期和其他属性?在发送请求以获取有关证书的信息之前,我是否必

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

$client = new Zend_Http_Client($url);
$response = $client->request('GET');
响应总是正常的,当我导航到“$url”时,如果单击浏览器窗口右下角的锁,我可以看到证书


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

我认为Zend_Http_客户端使用的标准连接适配器不可能执行此操作。我做了一点挖掘,看起来适配器使用了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);
}

这无疑把我引向了正确的方向。非常感谢你!你在哪里找到这个代码的?我在谷歌上搜索了一下,发现这个页面是最高的索引。我不得不四处搜寻。我最终在一篇新闻组文章中找到了一些代码,可以提取证书,然后是一个单独的代码,展示了如何提取公钥,php.net openssl文档展示了如何获取信息。剩下的就是反复试验。我真的应该链接到来源,但我不记得我到底在哪里找到了它们。