【发布时间】:2021-11-22 14:10:20
【问题描述】:
我已经搜索过与此错误相关的问题,但我对自己的一些服务器之间可能发生的事情感到困惑,这些服务器已经开始显示此错误:
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
第 7 行是 file_get_contents 命令。
这些是我控制的 (Debian) 服务器,所以我知道(据我所知)没有任何事情发生/更改或更新/升级。
我知道我可以使用包含以下内容的解决方案,但我很想先了解发生了什么(另外我有很多很多文件需要更新)。我还真的需要了解哪台服务器存在潜在问题。
我有 3 台服务器,所有这些服务器都使用 file_get_contents 请求访问另一台第四台服务器。其中两台服务器突然(几小时前的今天)开始出现上述错误,第三台似乎仍然可以正常工作。
我怀疑问题出在显示问题的两台服务器上,而不是他们都试图访问的第四台服务器上。
如果我实现这段代码,它可以工作,但我宁愿找到根本原因:
$arrContextOptions=array(
"ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
);
并将 file_get_contents 修改为以下内容:
file_get_contents($input, false, stream_context_create($arrContextOptions)));
但如前所述,我有数百个文件需要更改。
所有服务器都是 Debian 并且使用 Lets Encrypt certs 9 有效)。
我尝试在 php.ini 中添加以下内容:
openssl.cafile=/etc/letsencrypt/live/myserver.com/cert.pem
但这没有奏效(同样的错误仍然存在)。
仍然有效的服务器的 openssl 版本是 OpenSSL 1.1.0f 2017 年 5 月 25 日(库:OpenSSL 1.1.0l 2019 年 9 月 10 日),显示错误的两个版本是 OpenSSL 1.1.0l 2019 年 9 月 10 日不确定是否这样是相关的。
任何帮助将不胜感激。
更新
所以到目前为止我已经能够解决这个问题。经过大量的测试和试用后,老实说,我不太确定是什么解决了问题以确保它再次正常工作,但我做了以下所有操作:
apt upgradeapt update- 我删除了旧的
certbot-auto - 已安装
certbot(较新版本) - 从
/etc/ca-certificates.conf中删除了mozilla/DST_Root_CA_X3.crt - 跑
update-ca-certificates
同样,不确定上述哪个(或以上的组合)解决了问题,但它现在对我有用。
【问题讨论】:
-
交叉签名 LetsEncrypt 的根证书之一今天过期。尝试更新您的 ca-certificates 软件包,如果这不起作用,那么您可能使用的是 EOL 版本的 Debian,并且迫切需要升级。
-
@Sammitch 啊,谢谢,开始的好地方,谢谢。
-
我已经用对我有用的方法更新了我的问题,希望它能对某人有所帮助。感谢所有回答的人。
-
我认为 "!mozilla/DST_Root_CA_X3.crt" 删除和更新-ca-certificates 是解决方案。它帮助到我。请参阅我对 Gaurang 答案的评论。如果您在 google 中搜索此错误,您会发现数千个带有错误消息的网站。
标签: php openssl file-get-contents