突然的 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.crtupdate-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,所以我刚刚更新了 certbotca-certificates 软件包,然后问题就解决了。

以上是关于突然的 OpenSSL 错误消息:错误:14090086 使用 file_get_contents的主要内容,如果未能解决你的问题,请参考以下文章

无法下载“https://getcomposer.org/versions”文件:SSL 操作失败,代码为 1。OpenSSL 错误消息:错误:1416F086

OpenSSL 解密失败但错误代码为 0

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位)