Linux下OpenSSL升级(1.0.2 -> 1.1.1)并重新编译Nginx

本文介绍如何在Linux环境下从OpenSSL 1.0.2升级到1.1.1版本,包括下载安装新版本、配置环境变量及使用yum工具进行升级的方法。

Linux下OpenSSL升级(1.0.2 -> 1.1.1)

  1. 查看当前OpenSSL版本
  openssl version
  1. 下载并安装1.1.1版本的OpenSSL
//下载并解压 
  cd /usr/local/
  wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
  tar zxvf openssl-1.1.1w.tar.gz
  cd ./openssl-1.1.1w/

//预编译到指定安装路径,生成Makefile文件,
//-t参数可测试编译情况,–prefix:指定安装目录;
配置config 说明:
//–openssldir:指定openssl配置文件路径;
//--prefix:指定安装目录
//--openssldir:指定配置文件目录
//shared:作用是生成动态连接库
  ./config --prefix=/opt/openssl --openssldir=/usr/local/openssl

//编译,如果编译失败,可执行 make clean 或者编译前用 make test 测试编译情况而不直接编译
  make
  
//编译成功后安装
  make install 

(注意:编译失败可能需要更新zlib、gcc 可能会出现 缺少openssl开发依赖包)

yum -y install gcc pam-devel zlib-devel openssl-devel net-tools
  1. 变更系统PATH路径
  vim /etc/profile
//在打开的文件的最后一行添加
  export PATH="/opt/openssl/bin:$PATH"
//然后按Esc,输入:wq 使文件保存并退出
//是新配置的环境变量生效
  source /etc/profile
  1. 配置新的资源库路径
# 检查openssl-1.1.1w所需要的函数库
ldd /opt/openssl/bin/openssl
# 添加openssl-1.1.1w的库文件路径到ld.so.conf
echo "/opt/openssl/lib" >> /etc/ld.so.conf
# 如果有显示个别 not found,查找库的实际路径(例如在 /usr/lib64/ 或自定义目录)
sudo find / -name "libssl.so.1.1" -o -name "libcrypto.so.1.1"
# 根据上一步找到的路径,将库路径添加到系统配置(假设库在 /opt/openssl/lib/)
echo "/opt/openssl/lib" | sudo tee /etc/ld.so.conf.d/openssl.conf
# 没有not found后,更新系统函数库库 
ldconfig
# 绝对路径查看openssl版本
ldd /opt/openssl/bin/openssl
# 查看旧版本的openssl命令路径
which openssl
# 重命名为openssl.old
mv /usr/local/openssl /usr/local/openssl.old   #重命名openssl文件
# 使用软连接的方式更新openssl命令
ln -s /opt/openssl/bin/openssl /usr/local/openssl
# openssl命令查看版本呢
openssl version

5.重新编译Nginx(TLS1.3需要1.15以上版本)

./configure --prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-openssl=/opt/openssl

执行make后如果报错修改配置文件
如果在执行make后报错,修改nginx源码目录中auto/lib/openssl/conf中的openssl路径参数,在40行左右的位置对应四个参数中的.openssl去掉,修改后的内容如下:

  39             CORE_INCS="$CORE_INCS $OPENSSL/include"
  40             CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
  41             CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libssl.a"
  42             CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libcrypto.a"

修改完成后重新编译安装(执行make clean,再重新执行configure操作)

#Nginx 配置文件中将ssl做如下修改即可
ssl_protocols TLSv1.2 TLSv1.3;
#进入指定目录
cd /usr/local/nginx/sbin/
#检查nginx配置文件是否正确
./nginx -t
#启动nginx
./nginx
#停止nginx
./nginx -s stop
#重启nginx
./nginx -s reload
<think>首先,用户的问题是关于升级OpenSSL版本,从1.0.21.1.1。我需要参考提供的引用内容,但用户说这些引用仅供参考,不是真正的需求。我应该基于用户的问题和我的知识来回答。 用户的问题:"我想升级OpenSSL版本 请问如何从OpenSSL 1.0.2升级1.1.1" 引用[1]和[2]都提供了升级步骤,但针对CentOS系统。用户没有指定系统,所以我应该假设是Linux系统,如CentOS,因为引用是CentOS相关的。但为了通用性,我应该提到步骤可能因系统而异。 关键步骤从引用中提取: - 下载OpenSSL 1.1.1t源码 - 解压 - 编译和安装:./config ... make && make install - 替换旧文件:备份旧openssl,创建符号链接 - 验证版本 我需要确保回答结构清晰,逐步帮助用户解决问题。使用中文回答。 系统级指令要求: - 行内数学表达式用$...$,但这个问题可能不涉及数学,所以可能不需要。 - 独立公式用$$...$$,但同样,可能不适用。 - LaTeX语法正确:如果有数学,但这里可能没有。 - 生成相关问题:在回答后添加相关问题。 - 引用的段落末尾添加引用标识,如[^1]。既然引用是提供的,我应该引用它们。 用户说:"上述引用仅供参考,不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。" 用户上一次的问题就是这个,没有历史,所以我应该基于这个。 回答结构: 1. 介绍升级OpenSSL的重要性和注意事项。 2. 逐步说明升级步骤。 3. 包括验证步骤。 4. 添加相关问题。 步骤从引用中: 1. 检查当前版本:openssl version 2. 下载源码:wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1t.tar.gz 3. 解压:tar -zxf openssl-1.1.1t.tar.gz 4. 进入目录:cd openssl-1.1.1t 5. 配置:./config -Wl,-rpath=/usr/lib64 --prefix=/usr/local/openssl --openssldir=/usr/local/openssl --libdir=/usr/lib64 6. 编译和安装:make -j 4 && make install 7. 替换旧文件:备份 /usr/bin/openssl,创建符号链接:mv /usr/bin/openssl /usr/bin/openssl.bak; ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl 8. 验证:openssl version 注意:-j 4 是行编译,取决于CPU核心数。 系统可能不同,所以建议用户根据系统调整。 添加警告:升级系统关键组件可能影响依赖它的应用程序,如Apache、Nginx等。建议在测试环境中进行。 生成相关问题。 最终回答用中文。</think>### OpenSSL1.0.2 升级1.1.1 的详细指南 升级 OpenSSL 是重要的安全更新,因为 1.1.1 版本修复了旧版中的多个漏洞,支持新特性(如 TLS 1.3)。但请注意:**升级系统级组件可能影响依赖 OpenSSL 的应用程序(如 Apache、Nginx 或 SSH),建议先在测试环境中操作,备份关键数据**[^1]。以下步骤基于 Linux 系统(如 CentOS 或 Ubuntu),如果使用其他系统,部分命令可能需要调整(例如,路径或包管理器)。 #### 步骤 1: 检查当前 OpenSSL 版本 在升级前,确认当前版本,避免重复操作。 ```bash openssl version # 输出应类似:OpenSSL 1.0.2k-fips ... ``` #### 步骤 2: 下载 OpenSSL 1.1.1 源码 从官方源下载最新稳定版(这里以 1.1.1t 为例)。使用 `wget` 下载,跳过证书检查(`--no-check-certificate` 可选,适用于临时网络问题)。 ```bash wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1t.tar.gz ``` #### 步骤 3: 解压源码包 解压下载的文件,进入目录。 ```bash tar -zxf openssl-1.1.1t.tar.gz cd openssl-1.1.1t ``` #### 步骤 4: 配置编译选项 运行 `./config` 指定安装路径和参数。关键选项: - `--prefix=/usr/local/openssl`:安装到独立目录,避免覆盖系统文件。 - `--libdir=/usr/lib64`:确保库文件路径正确(64 位系统)。 - `-Wl,-rpath=/usr/lib64`:设置运行时库路径。 - `make -j 4`:行编译(`4` 是线程数,根据 CPU 核心数调整,例如 `-j $(nproc)`)。 ```bash ./config -Wl,-rpath=/usr/lib64 --prefix=/usr/local/openssl --openssldir=/usr/local/openssl --libdir=/usr/lib64 ``` #### 步骤 5: 编译和安装 执行编译和安装命令。如果遇到依赖错误(如缺少 `gcc` 或 `make`),先安装开发工具包(例如 CentOS: `yum groupinstall "Development Tools"`)。 ```bash make -j 4 && make install ``` #### 步骤 6: 替换系统旧版本 升级后,需更新系统链接,使新版本生效。**备份原文件以防回滚**。 ```bash mv /usr/bin/openssl /usr/bin/openssl.bak # 备份旧版 ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl # 创建符号链接 ``` #### 步骤 7: 更新库链接验证 重新加载库路径,检查版本是否更新。 ```bash ldconfig # 更新动态库缓存 openssl version # 输出应类似:OpenSSL 1.1.1t ... ``` 如果输出仍是旧版,运行 `export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH` 临时设置路径,或重启系统。 #### 步骤 8: 测试依赖应用程序 重启依赖 OpenSSL 的服务(如 SSH 或 Web 服务器),确保无错误。 ```bash systemctl restart sshd # 重启 SSH 服务 ssh -V # 检查 SSH 是否使用新版本 ``` #### 注意事项 - **权限问题**:如果命令失败,尝试用 `sudo` 执行。 - **系统兼容性**:CentOS 7 等旧系统可能需额外步骤(如更新 `ld.so.conf`)[^2]。 - **回滚方法**:如果出错,恢复备份文件:`mv /usr/bin/openssl.bak /usr/bin/openssl`。 - **安全建议**:升级后运行 `openssl s_client -connect example.com:443` 测试 TLS 握手。 通过以上步骤,您可安全升级 OpenSSL。如果遇到问题,提供错误日志可进一步诊断[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值