openssl 升级 | 证书验证失败

openssl 升级 | 证书验证失败

我在 CentOS7 机器上工作,并尝试将机器的 openssl 版本升级为 1.0.2k -> 1.1.0l。升级后,与我的服务器(没有变化)的握手过程似乎失败了,我正在尝试找出原因。

使用两个 openssl 版本运行以下命令:

openssl s_client-showcerts-连接服务器:端口

较新的版本导致失败(如果我提供 -CAfile 验证,则两者均有效)。结果的差异:

旧版 1.0.2k (握手成功):

服务器临时密钥:ECDH,P-256,256 位新,TLSv1/SSLv3,密码为 ECDHE-RSA-AES128-GCM-SHA256 新 1.1.0l(握手失败):

服务器临时密钥:X25519,253 位新密钥,TLSv1.2,密码为 ECDHE-RSA-AES128-GCM-SHA256 验证返回代码:20(无法获取本地颁发者证书)我希望帮助您理解它们之间的区别,以及它们为什么不同。

仅供参考,我在这里也发出了类似的威胁: https://stackoverflow.com/questions/68763253/openssl-upgrade-fail-validating-certificate?noredirect=1#comment121583146_68763253 但运气不佳。

谢谢 :)

答案1

在 Centos 7 中你也可以使用以下命令修复此问题:

#Prepare to compile
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y
yum groupinstall -y "Development Tools" "Development Libraries"

#Build from source
cd /usr/src
# --no-check-certificate because of that issue, your system will not validate letsencrypt certificate at openssl.org until finish update
wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1l.tar.gz
tar -zxf openssl-1.1.1l.tar.gz
cd openssl-1.1.1l
./config
make
make install

yum install ca-certificates -y 

答案2

供将来参考,在此添加解决方案。

一旦开始使用 openssl 版本 > 1.0.2kcentos7 机器上,根解析路径似乎发生了行为变化。

Openssl 会检查预定义的证书存储位置列表,但是,一旦它在 /val/ssl 中遇到 cert.pem 文件,它就会对其进行测试,如果无法验证您的远程,它就会失败。

我的“好”证书在 /etc/ssl 中,由于它是客户端的机器,因此我无法要求他删除 /var/ssl 文件。

我的解决方案是,如果 openssl 失败,通过编程选择正确的 cert.pem(不改变机器的 openssl 版本,这是被禁止的)。

相关内容