我有两个环境,一个是开发环境,另一个环境是镜像开发环境的。
在开发环境中,我正在尝试使用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
。
还有什么可以解释为什么它适用于生产系统,而不是开发,尽管是相同的?
答案 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');
您可以根据需要或您喜欢的适配器使用其他适配器。