加载共享库时出错:libcrypto.so.1.1


13

当我运行“ openssl”时,出现如下错误:

openssl:加载共享库时出错:libcrypto.so.1.1:无法打开共享库文件:没有这样的文件或目录”

根据本文尝试更新OpenSSL之后发生了这种情况

有没有什么办法解决这一问题?

操作系统:CentOS 6.8 Web服务器:nginx / 1.10.2

更新#1:

[root@host ~]# yum info openssl
Installed Packages
Name        : openssl
Arch        : x86_64
Version     : 1.0.1e
Release     : 48.el6_8.3
Size        : 4.0 M
Repo        : installed
From repo   : system-updates
Summary     : A general purpose cryptography library with TLS implementation
URL         : ***
License     : OpenSSL
Description : The OpenSSL toolkit provides support for secure communications
            : between machines. OpenSSL includes a certificate management tool and
            : shared libraries which provide various cryptographic algorithms and
            : protocols.

Available Packages
Name        : openssl
Arch        : i686
Version     : 1.0.1e
Release     : 48.el6_8.3
Size        : 1.5 M
Repo        : system-updates
Summary     : A general purpose cryptography library with TLS implementation
URL         : ***
License     : OpenSSL
Description : The OpenSSL toolkit provides support for secure communications
            : between machines. OpenSSL includes a certificate management tool and
            : shared libraries which provide various cryptographic algorithms and
            : protocols.

2
抱歉,您遇到了另一个糟糕的Internet教程。您可能必须重新安装系统。在继续之前,我建议您先问一下要解决的原始问题。可能有更好的方法可以实现原始目标。
迈克尔·汉普顿

我想安装Monitis提供的Server Monitor应用程序。它需要一些未安装在我的服务器中的共享库依赖项。因此,所有这些事情都是在安装它们的时候发生的。:(
mayasl '16

@MichaelHampton请告诉我一些有关重新安装系统的信息。因为一个实时站点正在该服务器上运行!
mayasl '16

Answers:


20

我在安装的OpenSSL 1.1.0c的最后一个版本后,同样的问题,我解决了复制库文件的问题libcrypto.so.1.1libcrypto.alibssl.so/usr/local/lib64在共享库/usr/lib64
复制库后,您需要创建符号链接。

ln -s libcrypto.so.1.1 libcrypto.so
ln -s libssl.so.1.1 libssl.so

创建符号链接后,还需要重建ldconfig高速缓存

sudo ldconfig

8

在原始版本的OpenSSL中,它知道如何查找共享库,因为/usr/lib64它包含在链接器的搜索路径中。当您下载并编译OpenSSL的“本地”副本时,/usr/local/lib64默认情况下将放置共享库。因此,您可能只需要将此目录添加到链接程序的搜索路径中,如下所示(作为根目录):

echo "/usr/local/lib64" > /etc/ld.so.conf.d/openssl.conf

然后执行:

ldconfig

我相信这会解决您的问题。


至少在现代Ubuntu发行版中(我在16.04 LTS上编写),可能还有其他发行版,sudo echo "/usr/local/lib64" > /etc/ld.so.conf.d/openssl.conf将导致“权限被拒绝”错误,因为命令的后半部分(文件写入)未作为root用户执行。如果发生这种情况,请尝试sudo sh -c "echo '/usr/local/lib64' >> /etc/ld.so.conf.d/openssl.conf"
马修·科尔

3

我在Chrome操作系统上使用Termux遇到此错误,这导致npmnode命令行程序崩溃。

运行pkg upgrade修复了问题!


1

您可以使用重新安装它

yum install -y openssl-devel


我也尝试过,但没有帮助!
mayasl

@mayasl也许您也需要重新安装其他软件包。我希望一个名为的程序包openssl-devel依赖于一个名为的程序包openssl。切记,自从触摸以来已经很长时间了yum,所以我无法为您验证命令的语法。
kasperd '16

我已经用“ yum info openssl”的输出更新了我的问题。如果有用的话,请看一下。在启动此线程之前,我删除并重新安装了openssl和openssl-devel。没工作!我使用的命令: codeyum remove openssl yum remove openssl-devel yum clean all
mayasl 2016年

重新安装openssl(而不是openssl-devel)应该是一个好的开始。
迈克尔汉普顿

我已经尝试过@MichaelHampton这是某种链接问题吗???
mayasl '16

1

本尼迪克特所说的对我有用。但是,您可能会发现某些符号链接指向较旧的版本。ls -l libcrypto*从/ usr / libs 运行将显示链接。如以下示例所示:

lrwxrwxrwx 1 root root      16 May 21 15:28 libcrypto.so -> libcrypto.so.1.0

然后,您想先删除现有链接,方法是键入sudo rm libcrypto.so然后复制libcrypto.so.1.1(如@benedict所述)。最后,您可以创建新链接。 sudo ln -s libcrypto.so.1.1 libcrypto.so

希望这可以帮助。


1

所述libcrypto.so属于openssl-libs包。如果您手动强行删除(带有--nodeps)此软件包或通过升级对其进行了破坏,则将无法访问yum,wget,curl,ssh等。如果系统具有Internet访问权限,请openssl-libs使用命令下载/usr/bin/GET。如果您要还原版本,语法将如下所示openssl-libs-1.0.2k-8.el7.x86_64

/usr/bin/GET http://downloadURL/openssl-libs-1.0.2k-8.el7.x86_64.rpm > openssl-libs-1.0.2k-8.el7.x86_64.rpm

这将为openssl-libs-1.0.2k-8.el7.x86_64.rpm您创建软件包,您可以使用它重新安装或提取丢失的.so文件。


0

我遇到了完全相同的问题...通过运行以下命令已解决了该问题。

ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1

这将创建一个软链接,您一切顺利。


0

这是我发现的最好的解决方案...其他在Internet上提供的其他解决方案将无法在系统重启后继续工作;)

操作系统:Ubuntu 16.04

sudo vim /etc/ld.so.conf.d/libc.conf

注释lib目录设置并添加良好的路径

# libc default configuration

#/usr/local/lib

/usr/lib

完成编辑后,运行以下命令:

sudo ldconfig

然后,您将在运行时具有良好的设置:

ldd / usr / bin / openssl

在此修复程序之前:

 /usr/bin/openssl: /usr/local/lib/libssl.so.1.0.0: no version information available (required by /usr/bin/openssl)
/usr/bin/openssl: /usr/local/lib/libssl.so.1.0.0: no version information available (required by /usr/bin/openssl)
 /usr/bin/openssl: /usr/local/lib/libssl.so.1.0.0: no version information available (required by /usr/bin/openssl)
/usr/bin/openssl: /usr/local/lib/libcrypto.so.1.0.0: no version information available (required by /usr/bin/openssl)
/usr/bin/openssl: /usr/local/lib/libcrypto.so.1.0.0: no version information available (required by /usr/bin/openssl)
/usr/bin/openssl: /usr/local/lib/libcrypto.so.1.0.0: no version information available (required by /usr/bin/openssl)
/usr/bin/openssl: /usr/local/lib/libcrypto.so.1.0.0: no version information available (required by /usr/bin/openssl)
linux-vdso.so.1 =>  (0x00007ffe6d1e3000)
libssl.so.1.0.0 => /usr/local/lib/libssl.so.1.0.0 (0x00007f8999827000)
libcrypto.so.1.0.0 => /usr/local/lib/libcrypto.so.1.0.0 (0x00007f89993ed000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8999023000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8998e1f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8999a97000)

修复后,我提供了:

linux-vdso.so.1 =>  (0x00007ffec39bc000)
libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007f7faad22000)
libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f7faa8dd000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7faa513000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7faa30f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7faaf8b000)

对于拥有CentOS路径的人,我认为好的文件是/etc/ld.so.conf;),只是要清楚一点。
ZEROF

0

在CentOS 7上libssl.so.1.1位于/usr/local/ssl/lib

因此,我只需要将此路径添加到默认位置,即可在该位置动态加载程序查找库。我创建了我的OpenSSL的二进制文件,命名为一个单独的文件openssl-1.1.1c.conf,在/etc/ld.so.conf.d文件夹:

echo "/usr/local/ssl/lib" > /etc/ld.so.conf.d/openssl-1.1.1c.conf

现在可以了。


-1

构建并安装open ssl openssl-1.1.0f之后,我修复了lib libssl.so.1.1的相同错误,从而创建了软链接:

ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.