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验证正常。

        结果昨天晚上服务器断电重启后,当我在获取电信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握手失败的解决方案

修改文件  /etc/ssl/openssl.cnf

# 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

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
回答: 当openssl出现"unable to get local issuer certificate"的错误时,通常是由于缺少本地颁发机构(CA)证书导致的。这个错误表示openssl无法验证服务器证书的颁发机构。一个解决方法是手动安装缺少的CA证书。你可以参考中提到的Composer的问题,它也是由于缺少CA证书导致的。另外,你也可以通过比较线上环境的openssl版本与本地服务器的openssl版本来找出问题所在,如所提到的。确保两个环境的openssl版本一致并且都包含了必要的CA证书。如果需要,你可以从可信任的证书提供商处获取并安装缺少的CA证书。123 #### 引用[.reference_title] - *1* [pip安装包报错unable to get local issuer certificate](https://blog.csdn.net/qq_33542154/article/details/123824774)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* [Composer出现 SSL certificate problem: unable to get local issuer certificate 报错的解决方法](https://blog.csdn.net/ioriliao/article/details/128256768)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *3* [centso7 openssl 报错Verify return code: 20 (unable to get local issuer certificate)](https://blog.csdn.net/yunxiaobaobei/article/details/125608720)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

破浪征程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值