【问题标题】:Retrieve SSL Certificate with Zend Http Request and Response使用 Zend Http 请求和响应检索 SSL 证书
【发布时间】:2009-09-23 22:42:36
【问题描述】:

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

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

响应始终正常,当我导航到“$url”时,如果单击浏览器窗口右下角的锁,我可以看到证书。

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 这无疑将我引向了正确的方向。非常感谢!你在哪里找到这个代码?我用谷歌搜索,这个页面是最高索引。
    • 我不得不四处打猎。我最终在一个新闻组帖子中找到了一些代码,可以提取证书,然后是一个单独的代码,显示如何提取公钥,php.net openssl 文档显示了如何获取信息。剩下的就是反复试验。我真的应该链接回源,但我不记得我在哪里找到了它们。
    猜你喜欢
    • 2013-10-26
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 2013-10-12
    • 2012-02-17
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    相关资源
    最近更新 更多