cURL error 60: SSL certificate problem : unable to get local issuer certificate 原因与解决办法

我在用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)

cURL error 60: SSL certificate problem : unable to get local issuer certificate

 

原因

此问题的出现是由于没有配置信任的服务器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扩展是否有开启?

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

    A+
发布日期:2017年04月21日 16:50:14  所属分类:PHP
最后更新时间:2021-07-06 11:05:56
付杰
  • ¥ 98.0元
  • 市场价:398.0元
  • ¥ 99.0元
  • 市场价:129.0元
  • ¥ 0.0元
  • 市场价:99.0元
  • ¥ 159.0元
  • 市场价:499.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:5   其中:访客  0   博主  0

  1. 头像 PHP大番薯 1

    我今天也遇到这样的问题了!如下:

    连接邮件服务器发生错误,错误信息:Connection error: Certificate failure for imap.163.com: unable to get local issuer certificate: /C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G3"

     连接邮件服务器发生错误,错误信息:Connection error: Certificate failure for imap.163.com: unable to get local issuer certificate: /C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G3
    结果也是SSL的问题,给大家看下163支持SSL协议的端口表格(其它邮箱平台同理!):

    服务器名称 服务器地址 SSL协议端口号 非SSL协议端口号
    IMAP imap.163.com 993 143
    SMTP smtp.163.com 465/994/587 25
    POP3 pop.163.com 995 110
  2. 头像 微信开发专家 3

    本人从事过微信开发近3年了,表示从来没有遇到这种问题,是不是自己没仔细看微信开发文档,自己写代码是否不细心;

  3. 头像 黑马过林 1

    我新手,刚接触微信开发,和老师一起做的项目,还没遇到这情况!

  4. 头像 朱哲 1

    我做了很多的微信项目开发,也没有遇到这样的问题,我也是用的http回调,也一直很正常的;不知道是不是你调试微信项目不是用的域名,而是直接用服务器IP呢?

  5. 头像 PHP小样酸乳盐 1

    我也是做微信开发的,我回调地址也是用的http,我为什么就没有出现这样的问题呢?

    微信开发者手册上不是有这样一句话吗?
    Scope为snsapi_base ,redirect_url应为http;
    Scope为snsapi_userinfo,redirect_url应为http;