Zend framework2 无法在Zend上的TCP连接api.mysite.com上启用加密

Zend framework2 无法在Zend上的TCP连接api.mysite.com上启用加密,zend-framework2,zend-http-client,Zend Framework2,Zend Http Client,我正在为Zend Framework 2创建一个模块应用程序。当我试图向我的服务器发送一个包含必要详细信息的post请求时,我得到一个错误“无法在TCP连接api.mysite.com上启用加密”。 早些时候,我收到错误“无法在TCP连接api.mysite.com上启用加密:确保为环境正确设置了“sslcafile”或“sslcapath”选项。” 在谷歌上,我发现应该将SSLVERIFYPER设置为false。完成此操作后,我只剩下“无法在TCP连接api.mysite.com上启用加密”这

我正在为Zend Framework 2创建一个模块应用程序。当我试图向我的服务器发送一个包含必要详细信息的post请求时,我得到一个错误“无法在TCP连接api.mysite.com上启用加密”。 早些时候,我收到错误“无法在TCP连接api.mysite.com上启用加密:确保为环境正确设置了“sslcafile”或“sslcapath”选项。”

在谷歌上,我发现应该将SSLVERIFYPER设置为false。完成此操作后,我只剩下“无法在TCP连接api.mysite.com上启用加密”这句话的第一部分 不知道我错在哪里


在以前的异常情况下,我得到“stream\u socket\u enable\u crypto():此流不支持SSL/crypto”

请参阅文档中的说明:。除非您所连接的站点没有有效的SSL证书,否则不应设置
sslverType
。相反,按照错误提示设置
sslcapath
。这为PHP提供了一种验证所连接主机提供的SSL证书的方法。

这是因为您的站点试图与使用SSL的站点通信。如果要使用默认适配器
Zend\Http\Client\adapter\Socket
,则必须定义sslcapath配置选项,以便允许PHP验证SSL证书。 为了避免这种情况,我使用了curl适配器

    $client = new Client();
    $client->setUri($endPointUrl);

    $options = array('put your options'); 

    $client->setOptions($options);
    $client->setAdapter('Zend\Http\Client\Adapter\Curl');
    $response = $client->send();

文档:

您需要设置Http客户端选项

工作环境如下:

// eko/FeedBundle and issue with ssl site -> https://github.com/eko/FeedBundle/issues/51
    $httpClientOptions = array(
        'adapter' => 'Zend\Http\Client\Adapter\Socket',
        'persistent' => false,
        'sslverifypeer' => false,
        'sslallowselfsigned' => false,
        'sslusecontext' => false,
        'ssl' => array(
            'verify_peer' => false,
            'allow_self_signed' => true,
            'capture_peer_cert' => true,
        ),
        'useragent' => 'Feed Reader',
    );
    ZendFeedReader::setHttpClient(new ZendHttpClient(null, $httpClientOptions));
// eko/FeedBundle and issue with ssl site -> https://github.com/eko/FeedBundle/issues/51
    $httpClientOptions = array(
        'adapter' => 'Zend\Http\Client\Adapter\Socket',
        'persistent' => false,
        'sslverifypeer' => false,
        'sslallowselfsigned' => true,
        'sslusecontext' => true,
        'ssl' => array(
            'verify_peer' => false,
            'allow_self_signed' => true,
            'capture_peer_cert' => true,
        ),
        'useragent' => 'Feed Reader',
    );
    ZendFeedReader::setHttpClient(new ZendHttpClient(null, $httpClientOptions));
以下是不工作设置:

// eko/FeedBundle and issue with ssl site -> https://github.com/eko/FeedBundle/issues/51
    $httpClientOptions = array(
        'adapter' => 'Zend\Http\Client\Adapter\Socket',
        'persistent' => false,
        'sslverifypeer' => false,
        'sslallowselfsigned' => false,
        'sslusecontext' => false,
        'ssl' => array(
            'verify_peer' => false,
            'allow_self_signed' => true,
            'capture_peer_cert' => true,
        ),
        'useragent' => 'Feed Reader',
    );
    ZendFeedReader::setHttpClient(new ZendHttpClient(null, $httpClientOptions));
// eko/FeedBundle and issue with ssl site -> https://github.com/eko/FeedBundle/issues/51
    $httpClientOptions = array(
        'adapter' => 'Zend\Http\Client\Adapter\Socket',
        'persistent' => false,
        'sslverifypeer' => false,
        'sslallowselfsigned' => true,
        'sslusecontext' => true,
        'ssl' => array(
            'verify_peer' => false,
            'allow_self_signed' => true,
            'capture_peer_cert' => true,
        ),
        'useragent' => 'Feed Reader',
    );
    ZendFeedReader::setHttpClient(new ZendHttpClient(null, $httpClientOptions));
注意:我对使用Zend库的symfony bundle eko/feedBundle有异议,所以本质上对您来说是一样的


此解决方案经过测试并证明有效。

嘿!但我如何为它设定路径呢?证书存储在哪里?这取决于您的操作系统
/etc/ssl/certs
对于Ubuntu来说是正确的,但是我不确定其他人是否正确。我在搜索时发现了同样的问题。在我的例子中,我必须以某种方式设置ZendOAuth cURL适配器参数。