1. 下载并编译OpenSSL 3.5.6
OpenSSL 3.5.6 是一个重要的安全补丁版本-,请从官方源下载。
# 下载源码
cd /usr/local/src
wget https://www.openssl.org/source/openssl-3.5.6.tar.gz
tar -xzvf openssl-3.5.6.tar.gz
cd openssl-3.5.6配置、编译与安装
./config --prefix=/usr/local/openssl356 --openssldir=/etc/ssl shared zlib
make -j$(nproc)
make install配置动态链接器
echo '/usr/local/openssl356/lib' > /etc/ld.so.conf.d/openssl356.conf
ldconfig报错请尝试以下路径
echo '/usr/local/openssl356/lib64' > /etc/ld.so.conf.d/openssl356.conf
ldconfig--prefix=/usr/local/openssl356:指定安装目录,便于管理和区分多个版本。shared:构建共享库(.so文件),这是大多数应用所依赖的-。
2. 验证OpenSSL安装
安装完成后,执行以下命令来验证新版本是否可用。
# 使用完整路径验证版本
/usr/local/openssl356/bin/openssl version
# 期望输出:OpenSSL 3.5.6 <日期>您也可以设置临时环境变量,让当前会话的 openssl 命令指向新版本,这并非必须。
export PATH=/usr/local/openssl356/bin:$PATH
openssl version3. 重新编译OpenSSH 10.3p1
这是最关键的步骤。新版OpenSSH需要与新版的OpenSSL库进行链接,才能使用其加密功能-。
回到OpenSSH源码目录并清理
cd /usr/local/src/openssh-10.3p1
make clean重新配置,关键是指定--with-ssl-dir为新OpenSSL的安装路径
./configure \
--prefix=/usr/local/openssh103 \
--sysconfdir=/etc/ssh \
--with-pam \
--with-ssl-dir=/usr/local/openssl356编译并安装
make -j$(nproc)
make install4. 覆盖系统命令并重启服务
编译完成后,将新的二进制文件复制到系统路径,并重启SSH服务。
覆盖系统命令
\cp -f /usr/local/openssh103/bin/ssh /usr/bin/ssh
\cp -f /usr/local/openssh103/sbin/sshd /usr/sbin/sshd
\cp -f /usr/local/openssh103/bin/ssh-keygen /usr/bin/ssh-keygen重启SSH服务
systemctl restart sshd🔗 检查与验证
完成上述步骤后,需要进行全面验证,确保升级成功且服务正常。
检查OpenSSH动态链接:
这是验证OpenSSH是否正确链接到新版OpenSSL库的关键。ldd /usr/sbin/sshd | grep ssl输出应包含新版的库路径:
/usr/local/openssl356/lib/libssl.so.3。测试SSH连接:
务必保持当前的root会话,并另开一个终端,尝试通过SSH登录服务器,确认一切功能正常。
💡 常见问题与解决方案
1. sshd 启动失败,报错 symbol not found
原因:新版OpenSSH仍然动态链接到了系统旧版的OpenSSL库,而非新安装的版本。
解决:请检查
ldd /usr/sbin/sshd | grep ssl的输出,确认其指向了/usr/local/openssl356/lib。如果指向错误,请确认在OpenSSH的./configure阶段已正确使用--with-ssl-dir参数指定了新库路径,并确保在make install后,/usr/sbin/sshd已被新生成的二进制文件覆盖。
2. 启动时遇到关于 OPENSSL_VERSION_NUMBER 的报错
原因:OpenSSL 3.5.2版本曾存在一个版本号定义问题,可能导致OpenSSH在启动时因版本检查不匹配而报错-。您使用的是3.5.6,此问题通常已被修复。
解决:如果遇到此问题,最直接的解决方法就是确保OpenSSH是在新版OpenSSL(3.5.6)安装之后才进行编译的。这能保证OpenSSH在编译时就获取到正确的版本号。
3. 其他应用无法使用新版OpenSSL库
原因:应用在编译时未找到新版的OpenSSL库。
解决:编译其他依赖OpenSSL的应用前,可以设置环境变量,帮助编译器找到新库:
export PKG_CONFIG_PATH=/usr/local/openssl356/lib/pkgconfig:$PKG_CONFIG_PATH export LD_LIBRARY_PATH=/usr/local/openssl356/lib:$LD_LIBRARY_PATH
升级OpenSSL为3.5 [LTS]版
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。