证书CA捆绑文件:PEM - PHP / cURL - 本地安装..?

时间:2016-01-28 10:39:22

标签: php ssl curl

我使用Windows Server 2008 R2(带IIS),PHP 5.6.0和cURL 7.36.0来测试PayPal的TLS测试网址:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://tlstest.paypal.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSLVERSION, 6); // CURL_SSLVERSION_TLSv1_2
curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '\cacert.pem');
$result = curl_exec($ch);
curl_close($ch);

当我使用http://curl.haxx.se/docs/caextract.html中的CURLOPT_CAINFOcacert.pem时,它可以正常工作,我得到了:

  

PayPal_Connection_OK

当我不使用CURLOPT_CAINFO时,我收到此错误:

  

SSL证书问题:无法获得本地颁发者证书

我试过这个:

  1. MMC
  2. 文件>添加/删除管理单元
  3. 证书(本地计算机)
  4. 受信任的根证书颁发机构>证书
  5. 所有任务>导入
  6. 选择cacert.pem
  7. 消息:"导入成功"
  8. 然而,这没有任何区别,我仍然必须使用CURLOPT_CAINFO才能发挥作用。

    有什么方法可以在我们的Windows服务器上安装所有这些根证书,这样我就不必每次打电话都使用CURLOPT_CAINFOcacert.pem。?

1 个答案:

答案 0 :(得分:3)

您可以利用php.ini设置cacert.pem所在位置的绝对路径。

指令是contextMenuHelper = new TableViewContextMenuHelper(tableView); // Adding additional menu options MenuItem exportMenuItem = new MenuItem("Export..."); contextMenuHelper.getAdditionalMenuItems().add(exportMenuItem);

设置它,或者至少读取它的值并将文件放在正确的位置。

请参阅: http://php.net/manual/en/curl.configuration.php