Centos7
默认提供的openssl
版本是1.0.2
的,某些php扩展或者其他软件依赖1.1
以上版本
如果过低的话就会报错libssl.so.1.1: cannot open shared object file: No such file or directory
也有执行openssl version
时报错和上面一致,这是由于openssl库的位置不正确或未安装1.1
以上版本的问题
想要升级openssl
版本则需要手动进行编译,报错解决方式很简单,安装正确即可,下面说一下我以Centos7
为例,说一下具体的编译安装步骤
1. 下载openssl
从openssl官网下载最新的代码包,因为源站下载速度过慢,所以我使用了腾讯云的镜像
#从官网下载
# wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
#腾讯云提供的镜像
wget https://mirrors.cloud.tencent.com/openssl/source/openssl-1.1.1g.tar.gz
如果链接失效,请去掉文件名,直接访问链接获取最新的包链接
2. 编译openssl
tar -xvf openssl-1.1.1g.tar.gz
cd openssl-1.1.1g
./config shared --openssldir=/usr/local/openssl --prefix=/usr/local/openssl
make && make install
编译完成后,使用openssl version
来查看一下当前openssl版本号时,你会发现还是1.0.2,所以这里需要做一些额外的配置工作
3. 配置
echo "/usr/local/lib64/" >> /etc/ld.so.conf
ldconfig
再次使用openssl version
验证版本就可以了,如果不行,可以尝试下面的方式,依次执行(先备份老版本,再从新版本安装位置创建软连接)
mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/lib/openssl /usr/lib/openssl.old
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
ldconfig -v
2021-01-26 更新
# 下载源码包
wget https://mirrors.cloud.tencent.com/openssl/source/openssl-1.1.1i.tar.gz -O /usr/local/src/openssl-1.1.1i.tar.gz
# 源码编译依赖gcc和perl(5.0版本以上)
yum -y install gcc perl
# 压缩包解压
cd /usr/local/src
tar xf openssl-1.1.1i.tar.gz
# 切换到源码目录
cd openssl-1.1.1i
# 执行编译
./config --prefix=/usr/local/openssl
./config -t
make && make install
# 查询旧版OpenSSL
rpm -qa | grep openssl
# 卸载旧版OpenSSL(--nodeps参数表示忽略依赖关系)
rpm -e openssl --nodeps
# 使用新版OpenSSL
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
# 添加函数库
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
# 更新函数库
ldconfig -v
# 检查新版OpenSSL
openssl version -a
注意事项
1. 系统旧版openssl软件包可以卸载,openssl其他附属软件包不建议卸载
2. 系统默认安装的openssl-libs不能卸载,否则系统可能会崩溃
问题
检查版本时如果报错: /usr/lib/x86_64-linux-gnu/libssl.so.1.1: version 'OPENSSL_1_1_1' not found
原因是:LD_LIBRARY_PATH
这个环境变量没有指定导致openssl正在使用旧的系统OpenSSL库
解决方法:
export LD_LIBRARY_PATH=/usr/local/lib
在1.1.0或以上版本的时候,最好显示地指定--prefix
和--openssldir
,除此以外还需要设置额外的CFLAGS
才能正常地运行,举个栗子
./config --prefix=/usr/local/openssl shared zlib-dynamic -Wl,-R,'$(LIBRPATH)' -Wl,--enable-new-dtags
任何个人或团体,未经允许禁止转载本文:《解决报错libssl.so.1.1: cannot open shared object file: No such file or directory》,谢谢合作!
“2. 系统默认安装的 openssl-libs 不能卸载,否则系统可能会崩溃”这句话应该写到删除之前,我删除了才看到,系统已经报错了。