今天在部署国密nginx安全认证通道时,遇到这个问题,在这里梳理一下整体思路。以下为个人理解,欢迎指正讨论。
这种报错大致分为两种:一类是required by openssl
;一类是required by mysql/nginx/其他应用命令
。
回归报错语句本身,分析走在实践前面
从根本来说,这个问题是LIBSSL.SO.1.1库缺少`OPENSSL_1_1_1k’ 这个版本。
可能有以下两个原因造成库缺少版本:
①LIBSSL.SO.1.1文件正确,文件内没有该版本。
②LIBSSL.SO.1.1文件出错,可能是坏文件。
判断具体是哪个原因:
//执行以下命令
//查看openssl版本
#openssl version
//搜索 libssl.so.1.1 动态so库里有没有OPENSSL_1_(原有版本)
#objdump -tT libssl.so.1.1 |grep OPENSSL_1_
如果库里能找到原有版本,库文件没有损坏,原因①;
库里找不到原有版本,库文件损坏,原因②。
第一类报错"required by openssl"更多的是原因①
第二类报错"required by nginx/mysql/…"更多的是原因②
原因一:
库文件没有损坏,只是缺少所需版本,一般升级openssl到库缺失的版本就可以解决,具体流程网上有很多,但是具体情况要具体分析,切记不要生搬硬套,可以多看几篇文章,了解每一步是在做什么,思考一下自己要怎样做。
生搬硬套吃大亏(手比脑快血泪史)
升级openssl的时候,需要重写软连接,务必要先备份
谨记先备份后删除
原因二:
查找正确的动态so库文件:
//执行命令查找所有动态so库文件
#find / -name libssl.so.1.1
//在查询结果中找到没有出错的动态so库文件
比如 /usr/lib/x86_64-linux-gnu/libssl.so.1.1
或者是其他符合生产环境的动态so库文件,我用了tassl生成的。
备份坏文件,替换成生产环境需要的文件:
哪个文件是坏文件就替换哪个
解决:.../libssl.so.1.1: version 'OPENSSL_1_1_1' not found (required by nginx)
//先备份,将出错原文件重命名为.old,用自己的出错路径#sudo mv /usr/local/lib/libssl.so.1.1 /usr/local/lib/libssl.so.1.1.old//复制上一步找到的正确文件到出错文件地址#sudo cp /usr/lib/x86_64-linux-gnu/libssl.so.1.1 /usr/local/lib/
解决.../libcrypto.so.1.1: version 'OPENSSL_1_1_1' not found (required by nginx)
//先备份,将出错原文件重命名为.old,用自己的出错路径#sudo mv /usr/local/lib/libcrypto.so.1.1 /usr/local/lib/libcrypto.so.1.1.old//复制上一步找到的正确文件到出错文件地址#sudo cp /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 /usr/local/lib/
删除前先备份
2.执行前知道自己在做什么
3.从报错出发,理清思路
来源地址:https://blog.csdn.net/zyxinside/article/details/125235862