2

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

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

响应总是好的,当我导航到“$url”时,如果我点击浏览器窗口右下角的锁,我可以看到证书。

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

4

1 回答 1

2

我认为 Zend_Http_Client 使用的标准连接适配器不可能。我做了一些挖掘,看起来适配器使用 fsockopen 几乎隐藏了您要查找的内容。方法是自己打开socket,先拿到证书:

$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);
}
于 2009-09-28T19:32:24.313 回答