【发布时间】:2016-03-09 08:43:34
【问题描述】:
这已经让我发疯了几个星期了。
我通常在 CentOS 7 机器上进行开发,但最近我开始在 Windows 10 上使用 Xampp 并使用 CentOS 机器将代码提交到客户端测试。
在 linux 机器上一切正常,但在 Windows 上,任何 SSL/TLS 调用都失败了,据我所知,这是由于 PHP5.6 默认验证对等证书和主机名的新特性 - http://php.net/manual/en/migration56.openssl.php
我已经阅读了几乎所有在线和 SO 上的操作指南,据我所知,我已经尝试了所有方法,但一无所获。
有人可以帮忙吗?!
在 php.ini 中启用了扩展 extension=php_openssl.dll,extension=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
有什么想法吗?
【问题讨论】:
-
您确定您使用的不是 PHP 5.6,而是从未真正正式发布的 PHP6?
-
如果你绝望了,就禁用它。 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
-
@hanshenrik - 理想情况下希望解决这个问题,而且我没有直接调用 cURL,它是在我集成的 API 中调用的,所以不能真正搞乱那里的代码.不过还是谢谢。
-
api 是否提供 curl 的直接句柄?