Zend框架在哪里保留默认证书存储区?

时间:2017-06-28 16:32:04

标签: php ssl zend-framework certificate ssl-certificate

我有两个环境,一个是开发环境,另一个环境是镜像开发环境的。

在开发环境中,我正在尝试使用zend框架连接到ssl服务器,我收到以下无意义的错误消息;

Unable to Connect to ssl://test.server.com:443. Error #0:

使用tcpdump,我发现错误是由于CA未知。

这是我的代码:

require_once 'Zend/Http/Client.php';
$uri = 'https://test.server.com';
$client = new Zend_Http_Client($uri);
$client->setHeaders(Zend_Http_Client::CONTENT_TYPE, 'application/json');
$response = $client->setRawData($json)->setEncType('application/json')->request('PUT');

我没有指定sslcapath,但是没有它我的生产系统工作正常。当我 - 设置sslcapath

$client = new Zend_Http_Client($uri, array(
            'sslcapath' => '/etc/ssl/certs'
        ));

我仍然得到错误。 所以我认为Zend正在某处使用证书存储(或者我正在设置sslcapath错误),我想检查CA是否在开发环境的证书存储中。

我的CA位于两个系统上的/etc/ssl/certs

还有什么可以解释为什么它适用于生产系统,而不是开发,尽管是相同的?

1 个答案:

答案 0 :(得分:1)

根据您提供的代码,您尚未定义Zend_Http_Client_Adapter。然后配置将根据您选择的适配器而有所不同。

https://framework.zend.com/manual/1.11/en/zend.http.client.adapters.html

使用socket的示例:

$config = array(
    'adapter'  => 'Zend_Http_Client_Adapter_Socket',
    'sslcert'  => '/etc/ssl/certs'
);

// Instantiate a client object
$client = new Zend_Http_Client($uri, $config);
$client->setHeaders(Zend_Http_Client::CONTENT_TYPE, 'application/json');
$response = $client->setRawData($json)->setEncType('application/json')->request('PUT');

您可以根据需要或您喜欢的适配器使用其他适配器。