SSL / TLS操作失败PHP5.6 - curl-ca-bundle.crt& cacert.pem

时间:2015-12-04 12:02:15

标签: php apache ssl curl xampp

这让我疯了几个星期了。

我通常在CentOS 7盒子上进行开发,但最近我开始在Windows 10上使用Xampp并使用CentOS盒将代码提交给&客户测试。

在Linux机器上一切正常,但在Windows上,任何SSL / TLS调用都失败了,而且我可以告诉它是由于默认情况下验证对等证书和主机名的新PHP5.6功能 - {{3 }}

我已经阅读了关于每一个如何在线指导,并且在SO上,据我所知,我已经尝试了所有的东西,但我无处可去。

请有人帮忙吗?!

在php.ini中启用扩展extension=php_openssl.dllextension=php_curl.dll也是如此。

我还下载了证书文件并将以下内容添加到我的php.ini ..

curl.cainfo = "‪C:\xampp\php\certs\curl-ca-bundle.crt"
curl.capath = "‪C:\xampp\php\certs\"


openssl.cafile= "‪C:\xampp\php\certs\curl-ca-bundle.crt"
openssl.capath= "‪C:\xampp\php\certs\"

我得到的错误是:

对于使用TLS的SMTP呼叫:

PHP Warning:  stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in W:\libraries\Zend\Mail\Protocol\Smtp.php on line 206

对于cURL电话:

API call to messages/send failed: error setting certificate verify locations: CAfile: ‪C:\xampp\php\certs\cacert.pem CApath: none

C:\xampp\php\certs\目录的内容是:

ca-bundle.trust.crt
cacert.pem
curl-ca-bundle.crt

我已经重新启动了Apache,甚至尝试在命令行中使用curl.exe作为独立程序,它可以很好地请求HTTPS域(不确定这是否相关,但我还是试过了!)

我还尝试将以下内容添加到php.ini(并重新启动Apache),但这无效。

openssl.verify_peer= false
openssl.verify_peer_name = false

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

错误消息error setting certificate verify locations来自libcurl本身,意味着它无法找到或打开指定的CAFile。

在Windows上,我认为如果您更改路径:

,它将起作用
curl.cainfo = "‪C:\xampp\php\certs\curl-ca-bundle.crt"

curl.cainfo = "‪C:/xampp/php/certs/curl-ca-bundle.crt"

OpenSSL可能也是如此,但我还没有通过测试确认。

答案 1 :(得分:0)

原来这是一个权限问题并且没有读取certs文件 - 将C:/xampp/php/certs/文件夹移动到另一个位置(例如在我的用户目录中)解决了问题:)

HTH