HCRM博客

CentOS升级OpenSSL至1.1.1t并兼容Nginx,零错误编译与平滑重启指南

CentOS升级OpenSSL到1.1.1t(兼容nginx):零报错编译+平滑重启全记录

CentOS升级OpenSSL至1.1.1t并兼容Nginx,零错误编译与平滑重启指南-图1

CentOS升级OpenSSL到1.1.1t(兼容nginx)

CentOS升级OpenSSL至1.1.1t并兼容Nginx,零错误编译与平滑重启指南-图2

线上跑了两年的老机器,昨晚被扫描器打出“SSL版本过低”警告,老板一句“天亮前修好”把我按在键盘前。CentOS自带OpenSSL还是老掉牙的1.0.2,nginx握手直接拒掉TLS1.3,浏览器地址栏红得发紫。踩坑五小时,把最顺的一套流程压成下面这份笔记,照着敲,保准一次过。

先别急着动手:三件事查完再开刀

1. 确认当前版本

openssl version -a 看一眼,如果返回1.0.2k或更低,就别幻想打补丁,直接上源码。

2. 确认nginx是否动态链接

nginx -V 2>&1 | grep -o 'openssl.*' 如果路径指向系统库,升级后必须重编nginx;如果是静态编译的自带库,可以省一步,但建议统一用系统新库,方便后续维护。

CentOS升级OpenSSL至1.1.1t并兼容Nginx,零错误编译与平滑重启指南-图3

3. 确认开发工具齐全

yum groupinstall "Development Tools" -y 把gcc、make、perl一股脑装齐,缺一个都编译不过。

下载与校验:别让压缩包带毒

去官网拉1.1.1t.tar.gz,wget断点续传最稳。下完顺手校验:

sha256sum openssl-1.1.1t.tar.gz 对照官网给的哈希,哪怕差一位都重下,别省这几秒。

编译安装:三条参数决定生死

解压后进去,别急着./config,先打补丁路径:

./config --prefix=/usr/local/openssl111 --openssldir=/usr/local/openssl111 shared zlib-dynamic -fPIC

重点解释:

shared 生成动态库,nginx才能链上;

zlib-dynamic 让压缩交给系统zlib,减少冗余;

-fPIC 让库文件位置无关,64位系统必加,不加nginx编译时报“relocation against symbol”直接爆炸。

make -j$(nproc) 十来秒完事;make install 把文件放进干净目录,不动老系统库,回滚秒删。

软链与库路径:别让系统找不到新娃

echo "/usr/local/openssl111/lib" > /etc/ld.so.conf.d/openssl111.conf

ldconfig -v 刷新缓存,再跑 ldconfig -p | grep openssl 看到1.1.1t排在最前才算成功。

备份旧命令:mv /usr/bin/openssl /usr/bin/openssl.old

ln -s /usr/local/openssl111/bin/openssl /usr/bin/openssl

openssl version 返回1.1.1t,命令行层面升级完成。

重编nginx:一条configure别写错

进nginx源码目录,原来怎么装这次还怎么装,只改一条:

./configure --with-openssl=/usr/local/openssl111 --with-openssl-opt="shared zlib-dynamic" 原来那一长串模块别丢,复制粘贴最稳。

make 完别急着 make install,先 objs/nginx -t 测试配置,确认没报错再覆盖:

cp objs/nginx /usr/sbin/nginx.new && mv /usr/sbin/nginx /usr/sbin/nginx.bak && mv /usr/sbin/nginx.new /usr/sbin/nginx

nginx -t && kill -USR2 cat /var/run/nginx.pid 平滑切到新进程,老连接不断,新连接直接上TLS1.3,浏览器灰锁秒变绿。

验证:三行命令让老板闭嘴

openssl sclient -connect 域名:443 -tls13 2>/dev/null | grep "TLSv1.3"

curl -I --tlsv1.3 https://域名 看返回200

SSL Labs在线检测直接拉A+,三项全绿截图甩群里,工单瞬间清零。

回滚预案:30秒回到旧版本

真出幺蛾子,一条命令秒回:

mv /usr/sbin/nginx.bak /usr/sbin/nginx && kill -HUP cat /var/run/nginx.pid

rm /usr/bin/openssl && mv /usr/bin/openssl.old /usr/bin/openssl

rm /etc/ld.so.conf.d/openssl111.conf && ldconfig

服务原样跑,老板都看不出你折腾过。

常见坑Top3:提前避雷

1. 缺perl模块

编译时报“perl module File::Copy missing”,yum install perl-core -y 立刻解决。

2. 路径写死

configure时--with-openssl写成了源码路径,结果nginx每次启动都去编译一次,机器直接卡死。正确做法是装好的/usr/local/openssl111。

3. 缓存没清

升级完浏览器还是报旧版本,其实是CDN缓存,curl直接测源站,别被表象忽悠。

后续维护:两条小习惯省大事

每月首日跑 yum update 前,先备份 /usr/local/openssl111 目录,打包丢到内网仓库;

nginx升级前先 staging 环境 objs/nginx -t 跑一遍,生产再动,血与泪的教训。

整套流程跑下来,CentOS升级OpenSSL到1.1.1t(兼容nginx)不再神秘,键盘敲完天还没亮,老板继续睡觉,我继续摸鱼。

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/42006.html

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~