我在使用新的 ubuntu 22.04 和 openssl 3.0.2 时遇到了问题

我在使用新的 ubuntu 22.04 和 openssl 3.0.2 时遇到了问题

当我将我的 Linux 升级到 22.04 和 openssl3.0.2(php7.4-fpm)时,我的网站出现此错误:

file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000126:SSL routines::unexpected eof while reading

答案1

如何启用 Legacy 提供程序?

我在 Ubuntu 22.04 上的 Nextcloud 上看到了类似的问题,最后我通过这个更改避免了这个问题。

--- /etc/ssl/openssl.cnf~original   2022-03-16 08:35:51.000000000 +0000
+++ /etc/ssl/openssl.cnf    2022-05-04 02:37:30.336530711 +0000
@@ -56,6 +56,7 @@
 # List of providers to load
 [provider_sect]
 default = default_sect
+legacy = legacy_sect
 # The fips section name should match the section name inside the
 # included fipsmodule.cnf.
 # fips = fips_sect
@@ -69,7 +70,9 @@
 # OpenSSL may not work correctly which could lead to significant system
 # problems including inability to remotely access the system.
 [default_sect]
-# activate = 1
+activate = 1
+[legacy_sect]
+activate = 1

https://gist.github.com/rdh27785/97210d439a280063bd768006450c435d

答案2

Ubuntu 22.04 将 OpenSSL 升级到 3.0.2 版本,其安全策略更加严格。我猜您正在尝试从过时的服务器下载文件,而 OpenSSL 3.0.2 默认不允许连接到该服务器。

OpenSSL 手册描述了允许尽管存在漏洞但仍进行连接的选项标志:

SSL_OP_IGNORE_UNEXPECTED_EOF

某些 TLS 实现在关闭时不会发送强制性的 close_notify 警报。如果应用程序尝试等待 close_notify 警报,但对等端关闭连接而不发送该警报,则会产生错误。启用此选项后,对等端无需发送 close_notify 警报,并且已关闭的连接将被视为已收到 close_notify 警报。

实际上,该SSL_OP_IGNORE_UNEXPECTED_EOF选项需要通过 OpenSSL API 进行设置,但您很可能使用某些更高级的函数来操作 HTTPS 连接(如 curl)。我认为最好的办法是找出该函数是否允许设置 OpenSSL 选项。

答案3

好的,我可以验证以下内容:如果您在 Ubuntu 22.04 上安装了 OpenSSL3.0.2 并收到此错误,请验证您使用的 PHP 版本。PHP8.0 及更低版本与 OpenSSL3.0.2 不兼容。您需要升级到 PHP8.1 或更高版本。我在 Ubuntu22.04 上运行 zabbix 服务器,并且在我的许多服务器上都收到此错误,但在更新到 PHP8.1 后,所有服务器都上线且没有错误。

https://github.com/php/php-src/issues/8369#issuecomment-1126935451 PHP 8.0 不支持 OpenSSL 3.0,因此不适用。

答案4

我遇到了类似的问题,并通过安装旧的 libssl 包版本(libssl1.1_1.1.1-1ubuntu2.1~18.04.20_amd64.deb)并删除 ubuntu 22.04 上的默认 libssl 版本(libssl.so.3)解决了该问题,我按照以下步骤操作:

相关内容