项目中碰到curl https偶尔出现false,错误码返回77的情况。针对查阅数据,发现两种导致原因:
1、确认安装机器ca-certificates,重启PHP。设置curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0):阻止对证书的合法性的检查
2、centos默认安装curl ssl_version:NSS,需要更改为openssl
curl参数说明:
CURLOPT_SSL_VERIFYPEER:是否检测服务器的证书是否由正规浏览器认证过的授权CA颁发的
CURLOPT_SSL_VERIFYHOST:是否检测服务器的域名与证书上的是否一致
CURLOPT_SSL_VERIFYHOST的值 :
设为0表示不检查证书
设为1表示检查证书中是否有CN(common name)字段
设为2表示在1的基础上校验当前的域名是否与CN匹配
而libcurl早期版本中这个变量是boolean值,为true时作用同目前设置为2,后来出于调试需求,增加了仅校验是否有CN字段的选项,因此两个值true/false就不够用了,升级为0/1/2三个值。
libcurl_7.28.1之后的版本,这个调试选项由于经常被开发者用错,被去掉了,因此目前也不支持1了,只有0/2两种取值。
关联阅读: