php - 证书 CA 捆绑文件 : PEM - PHP/cURL - Local install.。?

标签 php ssl curl

我正在使用 Windows Server 2008 R2(带有 IIS)、PHP 5.6.0 和 cURL 7.36.0 来针对 PayPal 的 TLS 测试 URL 进行测试:

$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.htmlCURLOPT_CAINFOcacert.pem 时它有效,我得到:

PayPal_Connection_OK

当我不使用 CURLOPT_CAINFO 时,我得到这个错误:

SSL certificate problem: unable to get local issuer certificate

我试过这个:

  1. MMC
  2. 文件 > 添加/删除管理单元
  3. 证书(本地计算机)
  4. 受信任的根证书颁发机构 > 证书
  5. 所有任务 > 导入
  6. 选择cacert.pem
  7. 消息:“导入成功”

但是这没有什么区别,我仍然必须使用 CURLOPT_CAINFO 才能工作。

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

最佳答案

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

指令是curl.cainfo

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

参见: http://php.net/manual/en/curl.configuration.php

关于php - 证书 CA 捆绑文件 : PEM - PHP/cURL - Local install.。?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35059118/

相关文章:

php - 如何在没有依赖的情况下在composer中安装包

PHP:调用未定义函数:simplexml_load_string()

java - 在 windows java 中执行curl命令的等效命令是哪个?

php - SELECT COUNT(*) WHERE 在列中的 2 个数字之间

php - 电子邮件验证后将数据发送到数据库

php - Php 中的多子数组

php - 无法在 Zend 框架 1.12 中找到套接字传输 "ssl"

sql - 对主键使用 uniqueidentifier 是否更安全?

Python:urllib.error.HTTPError:HTTP 错误 525:Origin SSL 握手错误

python - 这个 Perl XML 过滤器在 Python 中是什么样子的?