问题分析:

今天在部署国密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/

总结:

1.删除前先备份
2.执行前知道自己在做什么
3.从报错出发,理清思路

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐