当前位置:首页>Linux>Linux 编译 OpenSSL 不破坏系统的标准安装流程

Linux 编译 OpenSSL 不破坏系统的标准安装流程

  • 2026-09-17 14:12:10
Linux 编译 OpenSSL 不破坏系统的标准安装流程
问题描述:
编译安装openssl出现服务器无法登录问题

从截图看,你这个问题 99% 是 OpenSSL 编译安装后把系统原有库覆盖/优先级改变导致的库版本冲突。

核心报错:

/usr/bin/openssl: /usr/local/ssl/lib/libcrypto.so.1.1:
version `OPENSSL_1_1_1f' not found

说明:

  • /usr/bin/openssl 是 系统自带程序

  • 但它加载的却是 你编译安装的库

/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/bin/openssl 是 系统自带程序

  • 但它加载的却是 你编译安装的库

/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/*

如果有:

/usr/local/ssl/lib

删除它。

例如:

vim /etc/ld.so.conf.d/openssl.conf

删除:

/usr/local/ssl/lib


2 重新加载动态库

ldconfig


3 再验证

ldd /usr/bin/openssl

正常应该变成:

libssl.so.1.1 => /lib64/libssl.so.1.1
libcrypto.so.1.1 => /lib64/libcrypto.so.1.1

然后执行:

openssl version


二、如果还是不行(强制恢复)

直接暂时移走编译库:

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

然后:

ldconfig

再执行:

openssl version


三、正确的 OpenSSL 编译方式(运维规范)

千万不要替换系统 openssl

正确方式:

./config --prefix=/usr/local/openssl-1.1.1 \
--openssldir=/usr/local/openssl-1.1.1

安装:

make
make install

只使用:

/usr/local/openssl-1.1.1/bin/openssl

不要:

  • 覆盖 /usr/bin/openssl

  • 不要加入 /etc/ld.so.conf


四、运维经验总结(生产环境)

生产服务器 千万不要编译替换系统 OpenSSL,否则可能影响:

  • ssh

  • yum

  • curl

  • docker

  • nginx

  • rpm

严重可能 系统无法升级甚至无法登录。

正确原则:

系统openssl:保持系统自带
业务openssl:单独目录

在生产环境(尤其是 RedHat / 麒麟V10 / CentOS)中,绝对不要替换系统自带的 OpenSSL。正确做法是 多版本共存安装。下面给你一套 运维标准安装流程(生产可用)。


一、设计原则(运维规范)

核心原则:

类型
路径
系统 OpenSSL
/usr/bin/openssl
系统库
/lib64/libssl.so
自编译 OpenSSL
/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

编译

make-j4

安装

make install

安装完成目录结构:

/usr/local/openssl-1.1.1
├── bin
│   └── openssl
├── include
├── lib
└── ssl


四、使用方式(推荐)

直接使用指定路径

/usr/local/openssl-1.1.1/bin/openssl version

输出:

OpenSSL 1.1.1w

系统 OpenSSL 不受影响:

openssl version

仍然是系统版本。


五、可选:添加环境变量(安全方式)

只对当前用户生效。

vim ~/.bashrc

增加:

exportOPENSSL_HOME=/usr/local/openssl-1.1.1
exportPATH=$OPENSSL_HOME/bin:$PATH
exportLD_LIBRARY_PATH=$OPENSSL_HOME/lib:$LD_LIBRARY_PATH

生效

source ~/.bashrc


六、验证动态库

检查依赖:

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


九、验证系统是否被破坏

检查:

ldd /usr/bin/openssl

必须指向:

/lib64/libssl.so
/lib64/libcrypto.so

如果变成:

/usr/local/ssl/lib

说明系统被污染了。


十、一线运维经验(非常重要)

生产服务器 OpenSSL管理规范

项目
标准
系统OpenSSL
不动
业务OpenSSL
独立安装
路径
/usr/local/openssl-*
动态库
不加入 ld.so.conf
调用方式
业务指定

十一、运维最容易踩的 3 个坑

坑1 覆盖系统库

cp libssl.so /lib64/

直接炸系统。


坑2 写入 ld.so.conf

echo /usr/local/ssl/lib >> /etc/ld.so.conf

会导致 所有程序使用新库。


坑3 软链接覆盖

ln-sf /usr/local/ssl/bin/openssl /usr/bin/openssl

可能导致:

  • ssh

  • yum

  • docker

全部异常。


十二、SRE运维最佳实践

企业服务器一般:

/usr/local/
├── openssl-1.1.1
├── openssl-3.0
├── nginx
├── redis
└── mysql

实现 多版本共存。

最新文章

随机文章