A. 编译安装到独立前缀
1) 构建依赖(zlib 可选,建议装)
sudo apt update && sudo apt install -y build-essential perl zlib1g-dev
2) 下载并解压
cd /tmp
wget https://www.openssl.org/source/openssl-3.5.4.tar.gz
wget https://www.openssl.org/source/openssl-3.5.4.tar.gz.sha256
sha256sum -c openssl-3.5.4.tar.gz.sha256 # 校验通过再继续
tar xzf openssl-3.5.4.tar.gz
cd openssl-3.5.4
3) 独立前缀配置(--libdir=lib 统一库目录,便于后面引用)
./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl
--libdir=lib shared zlib
make -j"$(nproc)"
4) 只安装软件部分,不覆盖任何系统文件
sudo make install_sw
验证安装产物:
/usr/local/ssl/bin/openssl version # 应显示 3.5.4
ls /usr/local/ssl/lib/libssl.so.3 /usr/local/ssl/lib/libcrypto.so.3
B. 让命令行与新构建使用 3.5(对全系统登录 shell 生效)
/etc/profile.d 对所有登录用户生效;若只想当前用户则写 ~/.bashrc
cat <<'EOF' | sudo tee /etc/profile.d/openssl35.sh
export PATH=/usr/local/ssl/bin:PATHexportLDLIBRARYPATH=/usr/local/ssl/lib:PATH export LD_LIBRARY_PATH=/usr/local/ssl/lib:PATHexportLDLIBRARYPATH=/usr/local/ssl/lib:LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/ssl/lib/pkgconfig:$PKG_CONFIG_PATH
EOF
重新登录或 source /etc/profile.d/openssl35.sh,然后:
hash -r
which openssl # /usr/local/ssl/bin/openssl
openssl version # OpenSSL 3.5.4 ...
ldd "$(which openssl)" | grep -E 'ssl|crypto'
libssl.so.3 / libcrypto.so.3 应指向 /usr/local/ssl/lib/(不是 /usr/lib/x86_64-linux-gnu)
pkg-config --modversion openssl # 3.5.4
LD_LIBRARY_PATH 只影响登录 shell 及子进程,不影响 systemd 启动的系统服务,所以 sshd 等仍是 3.0.2------这正是我们要的安全边界。
C. hct 项目构建时链接 3.5
只要在构建前保持上面三个环境变量,hct 的 configure/CMake 若用 pkg-config openssl 或 find_package(OpenSSL) 会自动命中 3.5。若手写链接,加:
CFLAGS="-I/usr/local/ssl/include"
LDFLAGS="-L/usr/local/ssl/lib -Wl,-rpath,/usr/local/ssl/lib"
链接: -lssl -lcrypto
D. 回滚(随时可逆)
sudo rm -rf /usr/local/ssl
sudo rm -f /etc/profile.d/openssl35.sh
重新登录即回到系统 3.0.2
openssl version