在使用 getimagesize()
或者 file_get_contents()
函数处理网络文件时,如果是 https 协议,那么就可能遇到 SSL operation failed with code 1. OpenSSL Error messages:\nerror:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed” 错误。下面说下解决方案,基于 linux centos。
首先要检查是否配置了本地 ssl 证书,这也是网上大多数教程的解决方法。
查看服务器上 php 配置文件中,是否配置了 openssl.cafile,如下面的代码:
openssl.cafile=/etc/pki/tls/certs/ca-bundle.crt
如果有上述代码,并且对应路径下存在证书文件,证明已经配置过本地 ssl 证书,可以直接看下面的“已正确配置 ssl 证书,仍然报错解决方法”。否则请通过:http://curl.haxx.se/ca/cacert.pem 下载证书 cacert.pem,存放到任意位置,比如:/usr/local/openssl/
然后配置 php.ini 文件,增加如下代码,其中路径换成你存放的路径即可。
[curl]
curl.cainfo = /usr/local/openssl/cacert.pem
[openssl]
openssl.cafile=/usr/local/openssl/cacert.pem
之后重启 PHP 就可以解决问题了。网上的解决方案一般到此为止,但我遇到的问题是 ssl 证书已经正确配置了仍然报错,那么请继续往下看。
如果检查已经正确配置了本地 ssl 证书,那么通过系统命令更新 SSL 证书。
Linux 系统有更新本地证书的命令,不同系统命令不同,这里以 CentOS 举例 :
# 安装ca证书工具
yum install ca-certificates -y
# 更新证书
update-ca-trust
更新完成后,错误解决,代码运行正常。