2

サードパーティの API に接続しようとしていますが、Zend 1.7.0 フレームワークを使用してアクセスしています。認証するには、まず URL から返された SSL 証明書を確認する必要があります。これが私のコードで行っていることです。

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

応答は常に OK です。「$url」に移動すると、ブラウザ ウィンドウの右下隅にあるロックをクリックすると、証明書が表示されます。

応答オブジェクトを介して証明書の所有者、有効期限、およびその他のプロパティにアクセスする方法はありますか? 証明書に関する情報を取得するために、リクエストを送信する前に何か特別なことをする必要がありますか?

4

1 に答える 1

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