centso7 openssl 报错Verify return code: 20 (unable to get local issuer certificate)

2023-11-04

问题重现: 

        由于centos7 默认的openssl的版本为1.1.0k,本人编译媒体服务时,需要openssl版本1.1.1以上,所有删除的之前的低版本openssl,手动编译了一个1.1.1k的版本,媒体服务正常运行,并且CA验证正常。

        结果昨天晚上服务器断电重启后,当我在获取电信MQ数据时,openssl一直报错,Unhandled exception. System.Security.Authentication.AuthenticationException:The remote certificate was rejected by the provided RemoteCertificateValidat

使用openssl的命令测试连接状态:

openssl s_client -connect msgpush.ctwing.cn:16651

得到以下结果:

        

 提示,无法加载本地证书。使用了各种方案,编译各种版本的openssl,还是不行。

百般无奈下,只能分析线上环境的openssl(线上为云服务器,openssl为1.02K)与本地服务器的openssl的区别,又经历了痛苦的几个小时。终于在查看openssl 版本的命令中,看出了端倪,这个命令很重要:

openssl version -d

        线上打印的结果:

        

 本地服务器的结果:

 进入线上环境openssl 的目录:执行命令

ll

显示结果:

关键点就这个目录,看我标红的部分,这里的软链接就是证书的位置

我们再来看,本地服务器

 可以看到,并没有看到证书的软链接,

所以一切的原因就是这里,没有告诉系统openssl使用的证书位置。所以我们创建一个软链接即可。

ln -s /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem cert.pem
 

执行结果如下:

当我们再次使用openssl的测试命令时:成功了,

场景2:

通过上面流程执行后发现依然验证失败。

使用命令

 openssl verify cert.pem

提示无法加载文件,找不到指定的文件。

首先我们看我们openssl的安装路径是不是在/usr/local/lib64 目录下,经过查看无此文件夹,文件被安装到了/usr/local/lib 目录下,这里我们首先需要将ld.so.cnf中的路径修改为/usr/local/lib 

再次使用命令验证依旧失败,无法加载证书

经过比对,使用tls-ca-bundle.pem 文件为空,这里可能生成证书的时候配置有问题

我们将其他服务器受信任的证书拷贝一份过来,验证成功。

其他命令

openssl version -a

基于net 5.0在centos 7上提示ssl握手失败的解决方案

# Add this in the head of the file
openssl_conf = openssl_init

#
# skip
#

# And the following in the end of the file
[openssl_init]
ssl_conf = ssl_config

[ssl_config]
system_default = tls_defaults

[tls_defaults]
CipherString = @SECLEVEL=2:kEECDH:kRSA:kEDH:kPSK:kDHEPSK:kECDHEPSK:-aDSS:-3DES:!DES:!RC4:!RC2:!IDEA:-SEED:!eNULL:!aNULL:!MD5:-SHA384:-CAMELLIA:-ARIA:-AESCCM8
Ciphersuites = TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256
MinProtocol = TLSv1.2

问题链接:

.net 核心 - 互操作加密 OpenSslCryptographic异常:错误:14094410:SSL 例程:ssl3_read_bytes:sslv3 警报握手失败 - 堆栈溢出 (stackoverflow.com)

解决无法加载本地证书的参考文章:

How to Fix Unable to get Local Issuer Certificate - howtouselinux

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

centso7 openssl 报错Verify return code: 20 (unable to get local issuer certificate) 的相关文章

随机推荐

  • QZXing识别二维码

    下载QZXing这个识别二维码库 在github上下载qzxing https github com zxing zxing中的QZXing 新建qt工程 在pro文件中加入include QZXing sourceV2 4 QZXing
  • C++ 命名返回值优化(NRVO)

    命名的返回值优化 NRVO 这优化了冗余拷贝构造函数和析构函数调用 从而提高了总体性能 值得注意的是 这可能导致优化和非优化程序之间的不同行为 下面是代码段1中的一个简单示例 以说明优化及其实现方式 A MyMethod B var A r
  • 自动化运维:Ansible之playbook基于ROLES部署LNMP平台

    目录 一 理论 1 playbook剧本 2 ROLES角色 3 关系 4 Roles模块搭建LNMP架构 二 实验 1 Roles模块搭建LNMP架构 三 问题 1 剧本启动php报错语法问题 2 剧本启动mysql报错语法问题 3 剧本
  • Python编程:从入门到实践关于pi,百万位圆周率,pi_million_digits.txt,分享给大家

    blog github hexo的blog链接 github 我的github传送 CSDN 我的CSDN博客 学习python中需要一个百万圆周率的txt文件 但是按书上的链接又打不开 百度找了很久才找到 分享一下 以下是前500位 3
  • Sqlserver内存管理:限制最大占用内存

    一 Sqlserver对系统内存的管理原则是 按需分配 且贪婪 用完不还 它不会自动释放内存 因此执行结果集大的sql语句时 数据取出后 会一直占用内存 直到占满机器内存 并不会撑满 还是有个最大限制 比机器内存稍小 在重启服务前 sqls
  • 获取使用system权限

    win7 win8 获取system权限 win7的服务 注册表 文件夹等一些东西 即便你是administrator也没法修改 真郁闷 那就用system权限吧 以下方法是让一个程序以system权限运行 而不是类似在右键修改权限获取文件
  • 【Unity Shader】纹理实践2.0:基本属性&封装和滤波模式

    关于理论知识 技术美术图形部分 纹理基础1 0 纹理管线 flashinggg的博客 CSDN博客 上篇是总结了纹理映射一整个的流程 其中2 3纹理采样中提到了需要进行两块设置 设置封装模式 Wrap Mode 介绍了封装模式都有哪些 设置
  • [NC] 仓鼠与珂朵莉-分块

    给定一个长度为n的序列 m个询问 每次给出一个区间 查找区间内x cnt x 的最大值 由于题目的限制 下一次询问的区间会受到上一次查询结果的影响 所以必须要进行强制在线处理 首先将数列分成ceil n blk 1 块 对于询问中b l 1
  • android 11.0 开机动画横屏显示

    目录 1 概述 2 开机动画横屏显示的核心代码部分 3 开机动画横屏显示的核心代码部分分析以及实现功能
  • 计算机考研复试常问问题 数据结构篇

    第一章 绪论 1 时间复杂度 时间复杂度 算法执行时所需要的计算工作量 与整个算法的执行时间和基本操作重复的次数成正比 一个语句的频度是指该语句在算法中被重复执行的次数 算法中所有语句的频度之和记为T n O T n 的数量级 数量级 数量
  • Java 多线程事务回滚 ——多线程插入数据库时事务控制

    背景 日常项目中 经常会出现一个场景 同时批量插入数据库数据 由于逻辑复杂或者其它原因 我们无法使用sql进行批量插入 串行效率低 耗时长 为了提高效率 这个时候我们首先想到多线程并发插入 但是如何控制事务呢 直接上干货 实现效果 开启多条
  • 美图秀秀自动化测试工程师笔试面试

    2014年5月5日 笔试 一 选择题 1 有n个文件 进行快速排序 辅助存储空间为 A O 1 B O N C O Nlog2N D O N 2 2 给出一个两层for循环分别循环n次和m次 问时间复杂度 A O m n 3 很多都是关于j
  • SystemUI详解

    目录 一 简介 二 SystemUI的架构 三 SystemUI的主要组件 四 SystemUI的主要功能 五 SystemUI的自定义和定制 六 SystemUI的性能优化 一 简介 SystemUI是Android操作系统的一个关键组件
  • C语言枚举类型的大小

    主流编译器如 gcc vc MinGW gcc等枚举变量均为4字节 少量编译器会根据枚举个数做优化 如只有3个枚举值时 size可能为1 enum长度不确定会带来可移植性问题 如果第三方库API接口使用enum类型 编译和调用库时一旦有关e
  • c++读取TXT文件内容

    c 读取TXT文件内容 首先添加头文件 include
  • Cron expression must consist of 6 fields

    corn 表达式为 Scheduled cron 20 2021 运行代码提示报错 Cron 表达式必须包含 6 个字段 Cron expression must consist of 6 fields found 7 in 20 2021
  • 光盘装系统和U盘装系统有什么区别?哪个好?

    光盘装系统和U盘装系统的区别 U盘 U盘安装就是利用U盘启动盘制作工具 制作U盘启动盘 之后从U盘启动WIN PE 系统 再加载下载好的系统镜像进行安装的方法 光盘 光盘安装法就是利用购买好的系统盘 或者自己制作的系统盘 利用电脑的光驱 直
  • Uni-app登录态管理(vuex)

    转载 https www cnblogs com edward life p 11181139 html 应用中 保持登录状态是常见需求 本文讲解使用uni app框架时如何保持用户登录状态 即 初次进入应用为未登录状态 gt 登录 gt
  • html提交表单 node,Nodejs之http的表单提交

    之前介绍了http模块的请求与响应的过程 也介绍了TCP协议的客户端与服务端的数据传输 http协议是TCP上层协议 这里创建了一个简单的web服务器 并对提交表单数据进行处理 根据了不起的Node js一书总结 POST方法提交表单数据
  • centso7 openssl 报错Verify return code: 20 (unable to get local issuer certificate)

    问题重现 由于centos7 默认的openssl的版本为1 1 0k 本人编译媒体服务时 需要openssl版本1 1 1以上 所有删除的之前的低版本openssl 手动编译了一个1 1 1k的版本 媒体服务正常运行 并且CA验证正常 结