cURL连接问题 - 错误设置证书验证位置

时间:2017-04-25 15:27:38

标签: php codeigniter ssl curl nginx

我们一直在努力使用cURL,因为我们已经有了新的服务器(以前没有问题)。在过去的6个月里,我们一直在搜索并试图在根本上解决问题,但没有成功。

我们正在运行一个Ubuntu 16.04服务器,在PHP和Nginx上有一个Codeigniter项目。

我们目前遇到问题的(作曲家)包是Mailgun API(它扩展了作曲家包php-http

以下是我们通过cURL

连接时出现的错误
An uncaught Exception was encountered

Type: Http\Client\Exception\RequestException

Message: error setting certificate verify locations: CAfile: /etc/ssl/certs/ca-bundle.crt CApath: /etc/ssl/certs

Filename: /var/www/ domain /vendor/php-http/curl-client/src/Client.php

Line Number: 137

到目前为止,唯一有效的解决方案是禁用CURLOPT_SSL_VERIFYPEER,但我们必须在composer包中做到这一点,这显然不是一个合适的解决方案。

我希望有人能够就我们如何解决这个问题取得一些启示。

到目前为止我们尝试过:

  • 检查服务器上的日期
  • 禁用CURLOPT_SSL_VERIFYPEER,但不是可行的解决方案
  • 设置.curlrc文件(但问题是网络服务器用户正在执行,所以没有地方可以放置它?
  • 选中/etc/ssl/certs/文件夹以查看文件是否存在。
  • sudo update-ca-certificates --fresh

文件夹的文件权限

root@Ubuntu-1604-xenial-64-minimal /etc/ssl/certs # ls -la ca*
lrwxrwxrwx 1 root root     37 Apr 26 11:17 ca6e4ad9.0 -> ePKI_Root_Certification_Authority.pem
-rwxrwxrwx 1 root root 274340 Mar  8 17:09 ca-bundle.crt
-rwxrwxrwx 1 root root 274340 Apr 26 11:25 ca-certificates.crt
-rwxrwxrwx 1 root root 261889 Jan 18 06:12 cacert.pem
-rwxrwxrwx 1 root root 261889 Jan 18 06:12 cacert.pem.txt

1 个答案:

答案 0 :(得分:0)

由于我一直在努力解决这个问题并且无法在任何地方找到答案,但是由于not so related post中@ Deadooshka的帮助而找到答案,我会留下我的问题并在这里回答。

对我来说,/etc/ssl文件夹需要执行权限的解决方案。我不知道这出错了,但我的解决方案如下:

$ /etc # chmod o+x ssl

当权限错误时,我无法使用浏览器执行的Web根目录中的PHP脚本中的file_get_contents(/etc/ssl/certs/ca-certificates.crt)读取证书文件。修复后,文件被读取。