1

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

在谷歌搜索时,我发现我应该将 sslverifypeer 设置为 false。完成此操作后,我留下了句子的第一部分“无法在 TCP 连接 api.mysite.com 上启用加密”。不知道我可能错在哪里。

在以前的例外情况下,我得到“stream_socket_enable_crypto():这个流不支持 SSL/crypto”

4

3 回答 3

1

请在文档中查看此注释:http: //framework.zend.com/manual/2.3/en/modules/zend.http.client.html#connecting-to-ssl-urlssslverifypeer除非您连接的站点没有有效的 SSL 证书,否则您不应设置。相反,sslcapath按照错误提示进行设置。这为 PHP 提供了一种验证您正在连接的主机提供的 SSL 证书的方法。

于 2014-06-19T10:28:47.297 回答
1

这是由于您的站点试图与使用 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: //framework.zend.com/manual/current/en/modules/zend.http.client.html

于 2015-07-15T04:22:00.710 回答
0

您需要设置 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));

注意:我对使用 Zend 库的 symfony bundle eko/feedBundle 有疑问,所以基本上它对你来说是一样的。

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

于 2016-07-11T19:10:17.547 回答