我在用PHP开发微信项目,虽然说微信整个项目流程都能正常的运行起来,但是在微信授权,cURL请求接口的时候总是返回如下错误:
cURL error 60: SSL certificate problem : unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
中文翻译
cURL错误60:SSL证书问题:无法获得本地颁发者证书(请参阅http://curl.haxx.se/libcurl/c/libcurl-errors.html)
原因
此问题的出现是由于没有配置信任的服务器HTTPS验证。
默认,cURL被设为不信任任何CAs,就是说,它不信任任何服务器验证。因此,这就是浏览器无法通过HTTPs访问你服务器的原因。
简单来说,导致该问题的原因在于没有配置curl.cainfo,该配置位于php.ini中。
通过我们查看微信开发者文档你会发现,一排红色的字,如下:
尤其注意:跳转回调redirect_uri,应该使用https链接来确保授权code的安全性
解决方法
第一种方法:
如果你的内容不敏感,一个快捷的方法是使用curl_exec(),设置跳过ssl检查项。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
第二种方法:
下载一个ca-bundle.crt ,放到对应的目录,在php.ini文件中配置下路径
https://github.com/bagder/ca-bundle/blob/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt
在php.ini加入 ,重启web服务器
curl.cainfo="真实路径/ca-bundle.crt"
修改了PHP配置文件后,要想生效,不要忘记了重启PHP服务。
第三种方法:
具体可以参考:https://www.fujieace.com/weixin/curl-error-60-ssl-certificate.html
注意:
ssl证书是有时效期限的,虽然说github提供的这个ca证书里面包含了很多的平台密钥,总是会失效的,最长的ssl证书免费的有3到5年的,永久免费的ssl证书目前至少我还是没遇着的;
简单的说说我遇到此问题的经历吧!
其实我跟大家一样,遇到问题怎么办?只好找问题,找搜索引擎;首先肯定要先看一下自己的curl 和 openssl扩展是否有开启?
两个扩展都是开启的,说明扩展没问题!再去翻译一下英文,发现说:对待证书无法通过已知的CA证书进行身份验证;那就说明我项目中有存在https的请求,因为我的网站并未做https,如果有请求url是以https的方式去请求数据或者是接收数据,肯定会报这个错误!
仔细一想:我的所有的项目都是以http的方式去做的,而且现在并没有强迫用https,就算不用https也是可以的不是吗?因为去年我做微信开发也是一直用的http,也没有出这个问题;由于我是做的微信开发,有可能怀疑是微信严格要求需要https来接收数据。
结果:再次查看微信开发者文档,果然是这样!微信是有要求的,如果你不接收返回的数据不是以https协议,微信它会主动给你报一个error错误:
cURL error 60: SSL certificate problem : unable to get local issuer certificate
2018年04月18日 14:56:02 沙发
我今天也遇到这样的问题了!如下:
结果也是SSL的问题,给大家看下163支持SSL协议的端口表格(其它邮箱平台同理!):
2017年06月22日 23:46:52 板凳
本人从事过微信开发近3年了,表示从来没有遇到这种问题,是不是自己没仔细看微信开发文档,自己写代码是否不细心;
2017年04月25日 14:04:25 地板
我新手,刚接触微信开发,和老师一起做的项目,还没遇到这情况!
2017年04月21日 17:30:52 4楼
我做了很多的微信项目开发,也没有遇到这样的问题,我也是用的http回调,也一直很正常的;不知道是不是你调试微信项目不是用的域名,而是直接用服务器IP呢?
2017年04月21日 17:26:30 5楼
我也是做微信开发的,我回调地址也是用的http,我为什么就没有出现这样的问题呢?
微信开发者手册上不是有这样一句话吗?
Scope为snsapi_base ,redirect_url应为http;
Scope为snsapi_userinfo,redirect_url应为http;