OpenSSL错误消息:Error:0A000126:SSL例程::unexpected eof while readi



截图在这里

我已经建立了一个网站在PHP使用YII2框架。当我使用file_get_contents($requestUrl, false, stream_context_create($arrContextOptions))时,我得到错误说错误:0A000126:SSL例程::读取时意外eof我还尝试通过编辑openssl.cnf文件来启用遗留提供程序,但没有成功。参考:https://gist.github.com/rdh27785/97210d439a280063bd768006450c435d

如有任何帮助,我将不胜感激。

服务器:Nginx (Nginx/1.18.0)操作系统:Ubuntu 22.04 LTSPHP: 7.4.29Openssl: 1.1.1d

这个错误不仅在PHP中出现,而且在各种各样的上下文中都会出现,所以我在这里写一个通用的答案。其他解决方案通过升级已经在上游实现了解决方案的软件来解决问题。这里解释了原因和背景。大多数链接OpenSSL的软件在引入对新的openssl行为(例如1,2,3)的支持时都有票证。目前,在Ubuntu 22.04中,LTScurl的版本是7.81.0,并且在OpenSSL 3.0.x中出现意外EOF时会失败。最新的curl是7.88.1,显然解决了这个问题,虽然我找不到确切的提交或票。在Ubuntu 22.04和任何使用旧curl的系统中,解决方案是手动编译并安装最新的curl,如图所示。

重要的是,这个问题可以在客户端解决,您不需要对服务器做任何操作(特别是,在大多数情况下,它是第三方服务器并且工作正常)。

TLDR:

apt remove curl
apt purge curl
apt-get update
apt-get install -y libssl-dev autoconf libtool make
cd /usr/local/src
wget https://curl.haxx.se/download/curl-7.88.1.zip
unzip curl-7.88.1.zip
cd curl-7.88.1
./buildconf
./configure --with-ssl 
make
sudo make install
sudo cp /usr/local/bin/curl /usr/bin/curl
sudo ldconfig
curl -V

我刚刚遇到了同样的问题,看起来这是Ubuntu 22.04上的OpenSSL的问题。

我刚刚更新了服务器上的所有包,现在功能正常。

sudo apt update && sudo apt upgrade -y

将nginx 1.18.0升级到主线版本,问题将得到解决。

  1. Execute as sudo:curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor >/usr/share/keyrings/nginx-signing.gpg.
  2. 添加/etc/apt/sources.list:
deb [signed-by=/usr/share/keyrings/nginx-signing.gpg] https://nginx.org/packages/mainline/ubuntu/ jammy nginx
deb-src [signed-by=/usr/share/keyrings/nginx-signing.gpg] https://nginx.org/packages/mainline/ubuntu/ jammy nginx
  1. sudo apt update
  2. sudo apt install nginx

重新启动nginx服务器

尝试升级你的Nginx到1.22可能会有帮助。

在Cent OS 9 Stream上,您可以使用以下命令安装它

dnf module list nginx
dnf module reset nginx
dnf module install nginx:1.22

最新更新