从截图看,你这个问题 99% 是 OpenSSL 编译安装后把系统原有库覆盖/优先级改变导致的库版本冲突。
核心报错:
/usr/bin/openssl: /usr/local/ssl/lib/libcrypto.so.1.1:
version `OPENSSL_1_1_1f' not found
说明:
/usr/local/ssl/lib/libcrypto.so.1.1
而这个库 没有 OPENSSL_1_1_1f 符号版本,所以启动失败。
你的 ldd 也验证了这一点:
libssl.so.1.1 => /usr/local/ssl/lib/libssl.so.1.1
libcrypto.so.1.1 => /usr/local/ssl/lib/libcrypto.so.1.1
说明 动态库加载顺序已经被 /usr/local/ssl/lib 劫持了。
从截图看,你这个问题 99% 是 OpenSSL 编译安装后把系统原有库覆盖/优先级改变导致的库版本冲突。
核心报错:
/usr/bin/openssl: /usr/local/ssl/lib/libcrypto.so.1.1:
version `OPENSSL_1_1_1f' not found
说明:
/usr/local/ssl/lib/libcrypto.so.1.1
而这个库 没有 OPENSSL_1_1_1f 符号版本,所以启动失败。
你的 ldd 也验证了这一点:
libssl.so.1.1 => /usr/local/ssl/lib/libssl.so.1.1
libcrypto.so.1.1 => /usr/local/ssl/lib/libcrypto.so.1.1
说明 动态库加载顺序已经被 /usr/local/ssl/lib 劫持了。
一、最快恢复系统的方法(推荐)
先恢复系统 OpenSSL。
1 删除自编译库的优先级
检查是否配置了:
/etc/ld.so.conf
/etc/ld.so.conf.d/*
如果有:
删除它。
例如:
vim /etc/ld.so.conf.d/openssl.conf
删除:
2 重新加载动态库
3 再验证
正常应该变成:
libssl.so.1.1 => /lib64/libssl.so.1.1
libcrypto.so.1.1 => /lib64/libcrypto.so.1.1
然后执行:
二、如果还是不行(强制恢复)
直接暂时移走编译库:
mv /usr/local/ssl/lib/libcrypto.so.1.1 /usr/local/ssl/lib/libcrypto.so.1.1.bak
mv /usr/local/ssl/lib/libssl.so.1.1 /usr/local/ssl/lib/libssl.so.1.1.bak
然后:
再执行:
三、正确的 OpenSSL 编译方式(运维规范)
千万不要替换系统 openssl
正确方式:
./config --prefix=/usr/local/openssl-1.1.1 \
--openssldir=/usr/local/openssl-1.1.1
安装:
只使用:
/usr/local/openssl-1.1.1/bin/openssl
不要:
覆盖 /usr/bin/openssl
不要加入 /etc/ld.so.conf
四、运维经验总结(生产环境)
生产服务器 千万不要编译替换系统 OpenSSL,否则可能影响:
严重可能 系统无法升级甚至无法登录。
正确原则:
系统openssl:保持系统自带
业务openssl:单独目录
在生产环境(尤其是 RedHat / 麒麟V10 / CentOS)中,绝对不要替换系统自带的 OpenSSL。正确做法是 多版本共存安装。下面给你一套 运维标准安装流程(生产可用)。
一、设计原则(运维规范)
核心原则:
| |
|---|
| /usr/bin/openssl |
| /lib64/libssl.so |
| /usr/local/openssl-xxx |
绝对不要做的事
❌ 不要覆盖 /usr/bin/openssl
❌ 不要替换 /lib64/libssl.so
❌ 不要写入 /etc/ld.so.conf
否则可能导致:
ssh 登录失败
yum/rpm无法使用
docker/nginx异常
二、准备源码
下载源码(示例版本)
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
解压
tar xf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
三、标准编译安装(关键)
指定 独立目录
./config \
--prefix=/usr/local/openssl-1.1.1 \
--openssldir=/usr/local/openssl-1.1.1
编译
安装
安装完成目录结构:
/usr/local/openssl-1.1.1
├── bin
│ └── openssl
├── include
├── lib
└── ssl
四、使用方式(推荐)
直接使用指定路径
/usr/local/openssl-1.1.1/bin/openssl version
输出:
系统 OpenSSL 不受影响:
仍然是系统版本。
五、可选:添加环境变量(安全方式)
只对当前用户生效。
增加:
exportOPENSSL_HOME=/usr/local/openssl-1.1.1
exportPATH=$OPENSSL_HOME/bin:$PATH
exportLD_LIBRARY_PATH=$OPENSSL_HOME/lib:$LD_LIBRARY_PATH
生效
六、验证动态库
检查依赖:
ldd /usr/local/openssl-1.1.1/bin/openssl
应该显示:
libssl.so.1.1 => /usr/local/openssl-1.1.1/lib/libssl.so.1.1
libcrypto.so.1.1 => /usr/local/openssl-1.1.1/lib/libcrypto.so.1.1
说明 独立库加载成功。
七、给 Nginx / OpenResty 使用
编译 Nginx 时指定:
./configure \
--with-openssl=/usr/local/src/openssl-1.1.1w
这样:
nginx 使用新 openssl
系统 openssl 不变
这是 生产最常用方式。
八、企业级安装脚本(推荐)
运维一般做成自动化脚本:
#!/bin/bash
VERSION=1.1.1w
PREFIX=/usr/local/openssl-$VERSION
tar xf openssl-$VERSION.tar.gz
cd openssl-$VERSION
./config --prefix=$PREFIX--openssldir=$PREFIX
make-j$(nproc)
make install
echo"Install Finished"
$PREFIX/bin/openssl version
九、验证系统是否被破坏
检查:
必须指向:
/lib64/libssl.so
/lib64/libcrypto.so
如果变成:
说明系统被污染了。
十、一线运维经验(非常重要)
生产服务器 OpenSSL管理规范
十一、运维最容易踩的 3 个坑
坑1 覆盖系统库
直接炸系统。
坑2 写入 ld.so.conf
echo /usr/local/ssl/lib >> /etc/ld.so.conf
会导致 所有程序使用新库。
坑3 软链接覆盖
ln-sf /usr/local/ssl/bin/openssl /usr/bin/openssl
可能导致:
全部异常。
十二、SRE运维最佳实践
企业服务器一般:
/usr/local/
├── openssl-1.1.1
├── openssl-3.0
├── nginx
├── redis
└── mysql
实现 多版本共存。