问题重现:
由于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
问题链接:
解决无法加载本地证书的参考文章:
How to Fix Unable to get Local Issuer Certificate – howtouselinux