cURL SSL请求失败

时间:2012-05-01 14:33:47

标签: php rest ssl curl web

我正在尝试使用Liveperson REST API,我使用以下php代码:

$authorization = "LivePerson appKey=MY_APP_KEY";
$accept = "application/xml";
$contentType = "application/xml";


$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "C:/dev/wamp/exported.crt");

curl_setopt($ch, CURLOPT_URL, "https://dev.liveperson.net/api/account/1234?v=1");
curl_setopt($ch,CURLOPT_HTTPHEADER,array('Authorization: '.$authorization,'Accept: '.$accept,'Content-Type: '.$contentType));
curl_exec($ch);
$response = curl_getinfo( $ch );
var_export($response);
curl_close($ch);

请求失败,我已经尝试了以下

  • 在php.ini上启用openssl
  • 从liveperson服务器导出证书并在我的代码中使用
  • 遵循指令here

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

尝试从代码中的第9行删除getcwd()。 您正在使用完整路径“C:/dev/wamp/exported.crt”,这是相对于您当前的工作目录,这是错误的。 :)

希望这能解决它

答案 1 :(得分:0)

从您的请求中删除CA证书:

# curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "C:/dev/wamp/exported.crt");

实际上,您必须在此处定义证书颁发机构的公钥/证书文件(在您的案例中为VeriSign)。 Liveperson证书绝对是错误的。

检查证书是否对您的问题负责:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

此设置当然不适合您的项目,但可能有助于确定问题。如果认证过程以某种方式负责,您应该成功连接到Liveperson的API主机。

如果认证过程确实负责,请尝试下载[VeriSign的公共根证书]并将其用作CAINFO:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_CAINFO, "C:/dev/wamp/verisign_root.crt");