输入指令查看当前版本

openssl version -a

在编译更高版本的 OpenSSL 前需要先检查 OpenSSH 是否需要更新

sudo apt update
sudo apt upgrade

如果有新版本则需要更新,否则将 OpenSSL 更新后可能 OpenSSH 会无法使用。

将旧版本卸载

sudo apt remove openssl

建议在纯净的环境下进行,以免链接的动态库失效

安装编译环境

sudo apt install -y make gcc curl libgd-dev zlib1g-dev

下载软件包并解压,其他版本下载Downloads | OpenSSL Library

cd /usr/local/src/
wget https://github.com/openssl/openssl/releases/download/openssl-3.5.2/openssl-3.5.2.tar.gz
tar zxf openssl-3.5.2.tar.gz && cd openssl-3.5.2

设置编译参数

./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib

--prefix= 设置 lib、include、bin 目录,默认:/usr/local/ssl
--openssldir= 产品安装目录,默认:/usr/local/ssl
--libdir= 设置lib存放目录,默认:/path/lib64
shared/no-shared 是否生成动态连接库
zlib 启用 zlib 压缩支持

开始编译

make -j$(nproc) && make install

添加软链接

ln -s /usr/local/ssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/local/include/openssl
ln -s /usr/local/ssl/lib64/libssl.so.3 /usr/lib/libssl.so.3
ln -s /usr/local/ssl/lib64/libcrypto.so.3 /usr/lib/libcrypto.so.3

载入并查看配置

ldconfig
ldconfig -v

检查当前版本

openssl version -a

如果没有生效则尝试编辑 /etc/profile,将

if [ "$(id -u)" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH

else 后的 PATH 赋值字符串的末尾加上 :/usr/local/ssl/bin,修改后应该是

if [ "$(id -u)" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/ssl/bin"
fi
export PATH

重复载入并查看配置,再检查版本。

如果出现以下错误

openssl: /lib/x86_64-linux-gnu/libssl.so.3: version `OPENSSL_3.4.0' not found (required by openssl)
openssl: /lib/x86_64-linux-gnu/libssl.so.3: version `OPENSSL_3.2.0' not found (required by openssl)
openssl: /lib/x86_64-linux-gnu/libcrypto.so.3: version `OPENSSL_3.3.0' not found (required by openssl)
openssl: /lib/x86_64-linux-gnu/libcrypto.so.3: version `OPENSSL_3.5.0' not found (required by openssl)
openssl: /lib/x86_64-linux-gnu/libcrypto.so.3: version `OPENSSL_3.4.0' not found (required by openssl)
openssl: /lib/x86_64-linux-gnu/libcrypto.so.3: version `OPENSSL_3.2.0' not found (required by openssl)

可以尝试将原本的库删除。

rm /lib/x86_64-linux-gnu/libssl.so.3
rm /lib/x86_64-linux-gnu/libcrypto.so.3

参考地址:
openssl版本升级(3.2.1)