Debian服务器file_get_contents报OpenSSL error:14090086证书验证失败问题
PHP调用file_get_contents触发SSL证书验证失败问题
报错信息
Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /var/www/html/file_get.php on line 7
场景说明
- 3台Debian业务服务器均通过
file_get_contents请求访问第4台业务服务器,2台突然报上述错误,1台运行正常 - 所有服务器的Let's Encrypt证书均在有效期内,此前无配置变更、版本升级操作
- 临时关闭SSL校验的代码方案需要修改上百个业务文件,落地成本过高
- 尝试在php.ini中配置
openssl.cafile=/etc/letsencrypt/live/myserver.com/cert.pem未生效 - 正常服务器OpenSSL版本为
OpenSSL 1.1.0f 25 May 2017(依赖库版本:OpenSSL 1.1.0l 10 Sep 2019),报错服务器OpenSSL版本均为OpenSSL 1.1.0l 10 Sep 2019
根因定位
该问题由已过期的Let's Encrypt旧根证书DST Root CA X3导致:部分版本OpenSSL校验证书链时,会优先匹配系统中存在的已过期DST根证书,忽略有效的ISRG根证书,最终触发校验失败。
已验证生效的修复步骤
按顺序执行以下操作即可解决问题:
- 执行
apt update更新软件源 - 执行
apt upgrade升级系统软件包 - 卸载旧版本
certbot-auto,安装官方维护的新版本certbot - 编辑
/etc/ca-certificates.conf文件,移除mozilla/DST_Root_CA_X3.crt配置项 - 执行
update-ca-certificates命令更新系统根证书库
执行完成后无需修改业务代码,PHP的SSL证书校验即可恢复正常。
内容的提问来源于stack exchange,提问作者omega1
相关产品推荐
相关产品推荐

