突然的 OpenSSL 错误消息:错误:14090086 使用 file_get_contents
Posted
技术标签:
【中文标题】突然的 OpenSSL 错误消息:错误:14090086 使用 file_get_contents【英文标题】:Sudden OpenSSL Error messages: error:14090086 using file_get_contents 【发布时间】: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 upgrade
apt update
我删除了旧的certbot-auto
已安装certbot
(较新版本)
从/etc/ca-certificates.conf
中删除了mozilla/DST_Root_CA_X3.crt
跑update-ca-certificates
同样,不确定上述哪个(或以上的组合)解决了问题,但它现在对我有用。
【问题讨论】:
交叉签名 LetsEncrypt 的根证书之一今天过期。尝试更新您的 ca-certificates 软件包,如果这不起作用,那么您可能使用的是 EOL 版本的 Debian,并且迫切需要升级。 @Sammitch 啊,谢谢,开始的好地方,谢谢。 见:openssl.org/blog/blog/2021/09/13/LetsEncryptRootCertExpire 我已经用对我有用的方法更新了我的问题,希望它能对某人有所帮助。感谢所有回答的人。 我认为 "!mozilla/DST_Root_CA_X3.crt" 删除和更新-ca-certificates 是解决方案。它帮助到我。请参阅我对 Gaurang 答案的评论。如果您在 google 中搜索此错误,您会发现数千个带有错误消息的网站。 【参考方案1】:我今天也遇到了同样的问题, 在网络浏览器中正常,邮递员中的 SSL 错误和一些编程语言调用。 我的错误是由于根让我们加密证书到期 see announce here
使用 ssllab.com 我们发现我的证书存在两条认证链, 一个上升到 ISRG Root X1 没问题 另一个上 DST Root CA X3 自签名过期证书(9 月 30 日 à 14:00 gmt)
为了解决这个问题,我通过 snapd 将 certbot 更新到了最新版本(1.19)。我的 ubuntu 20.04 的数据包管理器中的那个不是最后一个。 (参考certbot doc)
然后我使用选项更新证书:--preferred-chain 'ISRG Root X1'
注意:期待 OP 更新,这可能是新版本 certbot 中的默认值
并重新启动服务。从那以后一切都好。
也确认这是您的问题, 认证链可以通过ssllabs.com等在线工具查看
证书失败示例:
Certification Paths
Path #1: Trusted
1 Sent by server asp.xyz.com
Fingerprint SHA256: 30c7865bd2fb4541e819bcfba43456b9fee3310b3faa8be8c86bd26a5cd6b15f
Pin SHA256: Iw4x0j6IktVzCyk1DsHyV5h8BuqXIq98VOhwLR0UWww=
RSA 2048 bits (e 65537) / SHA256withRSA
2 Sent by server R3
Fingerprint SHA256: 67add1166b020ae61b8f5fc96813c04c2aa589960796865572a3c7e737613dfd
Pin SHA256: jQJTbIh0grw0/1TkHSumWb+Fs0Ggogr621gT3PvPKG0=
RSA 2048 bits (e 65537) / SHA256withRSA
3 In trust store ISRG Root X1 Self-signed
Fingerprint SHA256: 96bcec06264976f37460779acf28c5a7cfe8a3c0aae11a8ffcee05c0bddf08c6
Pin SHA256: C5+lpZ7tcVwmwQIMcRtPbsQtWLABXhQzejna0wHFr8M=
RSA 4096 bits (e 65537) / SHA256withRSA
Path #2: Not trusted (invalid certificate [Fingerprint SHA256: 0687260331a72403d909f105e69bcf0d32e1bd2493ffc6d9206d11bcd6770739])
1 Sent by server asp.xyz.com
Fingerprint SHA256: 30c7865bd2fb4541e819bcfba43456b9fee3310b3faa8be8c86bd26a5cd6b15f
Pin SHA256: Iw4x0j6IktVzCyk1DsHyV5h8BuqXIq98VOhwLR0UWww=
RSA 2048 bits (e 65537) / SHA256withRSA
2 Sent by server R3
Fingerprint SHA256: 67add1166b020ae61b8f5fc96813c04c2aa589960796865572a3c7e737613dfd
Pin SHA256: jQJTbIh0grw0/1TkHSumWb+Fs0Ggogr621gT3PvPKG0=
RSA 2048 bits (e 65537) / SHA256withRSA
3 Sent by server ISRG Root X1
Fingerprint SHA256: 6d99fb265eb1c5b3744765fcbc648f3cd8e1bffafdc4c2f99b9d47cf7ff1c24f
Pin SHA256: C5+lpZ7tcVwmwQIMcRtPbsQtWLABXhQzejna0wHFr8M=
RSA 4096 bits (e 65537) / SHA256withRSA
4 In trust store DST Root CA X3 Self-signed
Fingerprint SHA256: 0687260331a72403d909f105e69bcf0d32e1bd2493ffc6d9206d11bcd6770739
Pin SHA256: Vjs8r4z+80wjNcr1YKepWQboSIRi63WsWXhIMN+eWys=
RSA 2048 bits (e 65537) / SHA1withRSA
Valid until: Thu, 30 Sep 2021 14:01:15 UTC
EXPIRED
Weak or insecure signature, but no impact on root certificate
【讨论】:
非常感谢您的回复。由于我的 certbot 的年龄,我无法运行 --preferred-chain 'ISRG Root X1',你知道如何手动执行吗?努力寻找文档。谢谢。 即使在 ubunutu 20.04 上,只要 certbot 包对于此选项来说太旧 (0.40)。您需要通过 snapd 安装最新版本。它安装在大多数 linux 上。只需检查snap --help
。然后更新它sudo snap install core; sudo snap refresh core
,卸载 os certbot 版本:sudo apt-get remove certbot
(不用担心,如果它们在 snapd 版本中出现故障,可以稍后安装)并更新 snapd 版本:sudo snap install --classic certbot
。
我已经用对我有用的方法更新了我的问题,希望它能对某人有所帮助。感谢所有回答的人。
certbot 更新中的变化是“只是”,与新证书生成一样,只有一个证书链,而之前的两个证书链共存,但第二个现在已过期,但仍被某些工具使用。我会更新我的答案
这解决了我在从 Debian 调用托管我的 API 的 Ubuntu 机器时遇到的问题。 PHP 5.6.4 客户端和 Apache 在主机上运行。更新两台机器上的 CA 证书没有帮助,升级两台机器的整个操作系统也没有帮助。指定首选链立即解决了问题。问题是由最近的 DST Root CA X3 到期引起的。【参考方案2】:
我在 Ubuntu 16.04.7 中遇到的类似问题,在我的情况下,我收到 SSL 错误:使用 Postman 尝试 GET / POST 时出现证书过期消息。
解决方法如下:
-
编辑
/etc/ca-certificates.conf
找到mozilla/DST_Root_CA_x3.crt
在行首添加!
sing,即!mozilla/DST_Root_CA_x3.crt
保存更改,然后更新证书sudo update-ca-certificates
重启服务器
Before The Solution
After The Solution
【讨论】:
非常感谢您提供此解决方案。它的工作非常好。在 update-ca-certificates 之后,无需重新启动即可修复错误。为什么我们需要重启?目前,数以百万计的网站在文件获取内容以及 sh 中的 wget 方面都存在此问题。我所有的 cronjobs 都不再起作用了。例如生成 ads.txt 的作业。因为这个问题,我已经损失了很多钱。感谢您提供此解决方案。请让我知道重新启动是否重要,如果它已经没有了。谢谢。 @labu77 很高兴听到它对您有用.. 在某些情况下,与 SSL 相关的问题已解决,但仍未在网站上收到POST / GET
数据,然后可能需要重新启动,以便更新证书在系统中更新信息,它将解决数据接收问题。【参考方案3】:
我在使用 CentOS 7 时遇到了同样的问题。
我的解决方案是:
sudo yum update ca-certificates
grep DST_Root_CA_x3 /etc/ssl/certs/ca-bundle.crt
删除 DST_Root_CA_x3 证书(如果存在)
重启服务
【讨论】:
我在使用 CentOS 7 时遇到了同样的问题。我使用的是 Virtualmin,所以我刚刚更新了certbot
和 ca-certificates
软件包,然后问题就解决了。以上是关于突然的 OpenSSL 错误消息:错误:14090086 使用 file_get_contents的主要内容,如果未能解决你的问题,请参考以下文章
无法下载“https://getcomposer.org/versions”文件:SSL 操作失败,代码为 1。OpenSSL 错误消息:错误:1416F086
CODEIGNITER - fwrite():SSL操作失败,代码为1. OpenSSL错误消息:错误:140D00CF:SSL例程:SSL_write:protocol is shutdown(示例
Facebook Graph API页面/对话/消息端点错误(突然似乎已弃用)
Node.js SSL 错误:错误的版本号:../deps/openssl/openssl/ssl/record/ssl3_record.c:332
Linux CentOS YUM错误包需要 - libcrypto.so.10(OPENSSL_1.0.1_EC)(64位)