cURL因SSL证书拒绝而失败?

时间:2012-07-13 17:12:35

标签: php ssl curl ssl-certificate

我正在管理一个测试版网站,其中只有少数试用用户(20个中的3个)无法在某些网页上看到该内容。每个用户在不同的网络上使用不同的计算机。我确保3位用户启用了JavaScript,但这并没有解决问题。

深入研究,看起来缺少内容是由于cURL调用失败;对于这些用户来说,curl_exec()似乎失败,或者没有返回数据,而这又返回null结果,这就是他们没有看到任何信息的原因。对于这3个用户,此问题存在于3个不同的浏览器(Chrome,IE,Firefox)中。我已经验证它不是由于任何用户设置,例如用户ID,因为我可以从不同网络上的多台计算机登录他们的帐户并获得响应。

我认为罪魁祸首可能是他们的机器/网络处理SSL证书的方式。我不太熟悉SSL证书,所以请原谅我在某些方面的无知或明显的错误。但是,消除过程让我相信网站证书被这3个用户的网络/机器拒绝,因此cURL呼叫失败。我的问题是如何验证是否是这种情况,如果是这样的原因是什么,以及如何解决问题?

该网站使用Zend frameowrk使用PHP构建。 以下是相关的代码:

$ssl_cert = ZendGA_Global::getOption('curl_ssl_certificate');
$ssl_verify_peer = ZendGA_Global::getOption('curl_ssl_verify_peer');
$ssl_verify_host = ZendGA_Global::getOption('curl_ssl_verify_host');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, $url);   
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// related to SSL cerificate verification
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, $ssl_verify_host);
curl_setopt($ch, CURLOPT_CAINFO, $ssl_cert);


//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我已经找到了问题:cURL调用失败了,但仅仅是因为URL不正确,这是一个原创于其他地方的问题。 URL是从基本URL和一些参数创建的,但是获取基本URL的功能是获取主机名而不是域名。有些用户通过VPN登录,这导致主机名的读取略有不同,这就是URL错误的原因。好吧,这是相当复杂的,但问题已经解决。 : - )