PHP · 05/14/2019 0

PHP CURL ERROR 77

项目中碰到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两种取值。

关联阅读:

LibreSSL替代OpenSSL

初识NSS,一文了解全貌

apt,curl,openssl之间的那点事