【问题标题】:Where does Zend framework keep the default certificate store?Zend 框架在哪里保存默认证书存储?
【发布时间】:2017-12-02 03:34:52
【问题描述】:

我有两种环境,一种是开发环境,另一种是反映开发环境的生产环境。

在开发环境中,我正在尝试使用 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

还有什么可以解释为什么它可以在生产系统上运行,而不是在开发系统上运行,尽管它们是相同的?

【问题讨论】:

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


    【解决方案1】:

    根据您给出的代码,您尚未定义Zend_Http_Client_Adapter。那么配置会根据你选择的适配器而有所不同。

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

    使用套接字的示例:

    $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');
    

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

    【讨论】:

    • Zend_Http_Client_Adapter_Socket 是默认值,所以这不会使我的代码与您编写的代码相同吗?此外,当我明确设置/etc/ssl/certs 路径时,它仍然无法识别我的证书。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 2014-01-27
    • 2013-02-10
    • 2018-08-19
    • 2019-07-27
    相关资源
    最近更新 更多