我正在尝试在 Centos 7 (7.3.1611) 上编译 openssl-1.1.0e 但是在我没有任何警告地成功编译所有内容之后,当我尝试任何 openssl 命令时出现错误
[mdm@dev openssl-1.1.0e]$ openssl version
openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
是bug还是我的错误?
下面是关于我的系统/配置的一些信息
配置:
[mdm@dev openssl-1.1.0e]$ ./Configure linux-x86_64 --prefix=/usr/local --openssldir=/usr/local
制作/制作测试:
...
All tests successful.
Files=91, Tests=486, 44 wallclock secs ( 0.47 usr 0.08 sys + 27.72 cusr 13.41 csys = 41.68 CPU)
Result: PASS
...
安装:
...
install libcrypto.a -> /usr/local/lib64/libcrypto.a
install libssl.a -> /usr/local/lib64/libssl.a
install libcrypto.so.1.1 -> /usr/local/lib64/libcrypto.so.1.1
link /usr/local/lib64/libcrypto.so -> /usr/local/lib64/libcrypto.so.1.1
install libssl.so.1.1 -> /usr/local/lib64/libssl.so.1.1
link /usr/local/lib64/libssl.so -> /usr/local/lib64/libssl.so.1.1
...
但是如果我用 ldd 检查两个库,尽管 Make install 做了它的工作......
[mdm@dev openssl-1.1.0e]$ ldd /usr/local/bin/openssl
linux-vdso.so.1 => (0x00007fffcfe75000)
/lib/$LIB/liblsp.so => /lib/lib64/liblsp.so (0x00007fa5cd77a000)
libssl.so.1.1 => not found
libcrypto.so.1.1 => not found
libdl.so.2 => /lib64/libdl.so.2 (0x00007fa5cd55d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa5cd341000)
libc.so.6 => /lib64/libc.so.6 (0x00007fa5ccf7f000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa5cd981000)
我已经通过发行版安装了一个 openssl 版本:
[mdm@dev]$ openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
[mdm@dev]$ which openssl
/usr/bin/openssl
yum 信息 openssl:
...
Installed Packages
Name : openssl
Arch : x86_64
Epoch : 1
Version : 1.0.1e
Release : 60.el7_3.1
Size : 1.5 M
Repo : installed
From repo : updates
...
感谢任何帮助或建议!
有时当你想爬山时,你只看山顶而没有检查是否有什么可以帮助你在基地......
在我的例子中,我解决了在再次编译之前导出
LD_LIBRARY_PATH
的问题。
export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64
及之后
sudo ldconfig
重启机器后也应该保存路径(以及下一次)
感谢 levitte,RenatoXSR
对于
OpenSSL 1.1.0g
,CentOS 7.2.1511
,你可以试试这个
sudo bash -c "echo '/usr/local/lib64' >> /etc/ld.so.conf"
sudo ldconfig
这个链接解释了问题的原因
RPATH的使用不一致。在某些系统上,ld.so 在查看 LD_LIBRARY_PATH 之前会考虑 RPATH,这使得它很难被覆盖,例如在测试新的 OpenSSL 构建时(!)。我们在 1.1.0 之前的版本中通过破解 LD_PRELOAD 做到了这一点,但是有一些消毒剂不同意这一点,这也让生活变得艰难,例如在测试新的 OpenSSL 构建时(!)
这个链接给出了一个解决方案的例子
我知道这已经晚了,但就我而言,我的服务器上没有
libssl.so.1.1
。
有一个建议这里安装openssl11-libs
但不是openssl11
因为安装它可能会产生问题。
确认您的服务器上没有
libssl.so.1.1
,可能是通过尝试locate libssl.so.1.1
.
如果您的服务器上没有
sudo yum install -y openssl11-libs
库,只需执行libssl.so.1.1
。
对我有用。
试试这个:
ldd libssl.so -> libcrypto.so.1.1 => not found
sudo ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007f17d46c7000)
配置:
[mdm@dev openssl-1.1.0e]$ ./Configure linux-x86_64 --prefix=/usr/local --openssldir=/usr/local
在这种情况下,您应该配置 OpenSSL:
./Configure linux-x86_64 enable-ec_nistp_64_gcc_128 -Wl,-rpath=/usr/local/lib64 \
--prefix=/usr/local --openssldir=/usr/local
OpenSSL 默认不添加 RPATH(某些 BSD 除外)。您需要在配置命令中手动指定它。一旦你手动指定它,事情就会为你“正常工作”,而不需要
LD_LIBRARY_PATH
技巧。
enable-ec_nistp_64_gcc_128
适用于x86_64。它使 Diffie-Hellman 的运行速度提高了 2 到 4 倍。该选项有一些限制,所以使用它时要小心(但你在 x86_64 上是安全的)。
另请参阅 OpenSSL wiki 上的编译和安装。有RPATHs的讨论,还有
enable-ec_nistp_64_gcc_128
的讨论。
在这种情况下,您应该配置 OpenSSL:
./配置linux-x86_64 enable-ec_nistp_64_gcc_128 -Wl,-rpath=/usr/local/lib64 \ --prefix=/usr/local --openssldir=/usr/local 默认情况下,OpenSSL 不添加 RPATH(某些 BSD 除外)。您需要在您的 配置命令。一旦你手动指定它,事情就会“只是 工作”,而不需要 LD_LIBRARY_PATH 技巧。
我听从了你的建议,但如果我不指定 LD_LIBRARY_PATH 仍然会出现同样的错误,它无论如何都不起作用......
[mdm@dev openssl-1.1.0e]$ export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64
[mdm@dev openssl-1.1.0e]$ ldd /usr/local/bin/openssl
linux-vdso.so.1 => (0x00007ffc87aef000)
/lib/$LIB/liblsp.so => /lib/lib64/liblsp.so (0x00007f57511fa000)
libssl.so.1.1 => /usr/local/lib/libssl.so.1.1 (0x00007f5750f8c000)
libcrypto.so.1.1 => /usr/local/lib/libcrypto.so.1.1 (0x00007f5750ae8000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f57508cb000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f57506ae000)
libc.so.6 => /lib64/libc.so.6 (0x00007f57502ed000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5751401000)
[mdm@dev openssl-1.1.0e]$ openssl version
OpenSSL 1.1.0e 16 Feb 2017
看起来我无论如何都必须使用 LD_LIBRARY_PATH 我想知道这是正常的还是只是我机器上的不当行为,出于某些我的知识无法弄清楚的原因......
jk2K 解决了我的问题
对于OpenSSL 1.1.0g, CentOS 7.2.1511,你可以试试这个:
sudo bash -c "echo '/usr/local/lib64' >> /etc/ld.so.conf"
sudo ldconfig
对于 CentOS 7+,将以下内容添加到
/etc/environment
:
LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64
我建议你使用来自
EPEL repo的半官方 OpenSSL 1.1 包
openssl11
而不是从头开始编译它:
# if you don't have EPEL repo yet...
yum install -y epel-release
# ...and then:
yum install -y openssl11
这可能会成功
sudo apt-get install libssl1.1
这对我有用:
echo "deb http://security.ubuntu.com/ubuntu focal-security main" | sudo tee /etc/apt/sources.list.d/focal-security.list
sudo apt update && sudo apt install libssl1.1
我们在将 openssl 从 1.0.2g 升级到 1.1.0g 后遇到了同样的问题。 存在所需的库,并且存在软链接。
sudo ldconfig
为我们工作。它重建了
ldconfig
缓存。