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