我们一直在努力使用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
答案 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)
读取证书文件。修复后,文件被读取。