2011-05-18 54 views
1

所以我在这里和其他地方发现了很多关于PHP,cURL和SSL的interwebs的帖子。我有一个问题,我没有看到。cURL上的新自旋不能通过SSL工作

很明显,如果我设置SSL_VERIFYPEER/HOST来盲目接受我可以得到这个工作,但我想用我的证书来验证连接。

因此,这里是一些代码:

 $options = array(
      CURLOPT_URL => $oAuthResult['signed_url'], 
      CURLOPT_RETURNTRANSFER => TRUE, 
      CURLOPT_HEADER => 0, 
      CURLOPT_SSL_VERIFYPEER => TRUE, 
      CURLOPT_SSL_VERIFYHOST => 2, 
      CURLOPT_CAINFO => getcwd() . '\application\third_party\certs\rootCerr.crt' 

     ); 
     curl_setopt_array($ch, $options); 
    try { 
     $result = curl_exec($ch); 
     $errCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
     if (curl_getinfo($ch, CURLINFO_HTTP_CODE) != 200) { 
      throw new Exception('<strong>Error trying to ExecuteWebRequest, returned: '.$errCode .'<br>URL:'.$url . '<br>POST data (if any):</strong><br>'); 
     } 

     curl_close($ch); 

    } catch (Exception $e) { 
     //print the error stuff 
    } 

返回的错误代码是0 ...这意味着一切都OK ......但因为没有回来屏幕...我很确定它不工作。

有人吗?

+0

原来,这是一个域问题。我对此并不是100%确定,但它向我解释的方式是,由于该网站位于子域,因此我们需要获得通配证书。一旦我们得到了,一切都奏效了。我可能会解释这是完全错误的,如果我是我稍后更新的,但是一旦我们获得了正确的SSL设置,这段代码就完美了。 – JoeCianflone 2011-05-25 20:23:18

回答

0

您提取的$ errCode是确定时为200-299的HTTP代码。获得0意味着它从来没有因为问题或类似原因而被设置。

你应该在curl_exec()之后使用curl_errno()来判断事情是否正常。 (你不能容易地检查curl_exec()返回代码的错误,因为你启用了CURLOPT_RETURNTRANSFER,它使得该函数返回它设置的传输内容。当然,根本没有获得任何内容是一个很好的指标的东西失败了。)

0

我使用CURLOPT_CAINFO你已经表示实施libcurl中证证书......

然而,通过提供文件名本身还不够好?它也撞在了我身上。

对我来说,文件被相对路径引用......此外,我还必须确保证书也是Base64格式。然后,一切都经历了顺利......