Linux下OpenSSL升级(1.0.2 -> 1.1.1)
- 查看当前OpenSSL版本
openssl version
- 下载并安装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
- 变更系统PATH路径
vim /etc/profile
//在打开的文件的最后一行添加
export PATH="/opt/openssl/bin:$PATH"
//然后按Esc,输入:wq 使文件保存并退出
//是新配置的环境变量生效
source /etc/profile
- 配置新的资源库路径
# 检查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后报错,修改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