ssl - 新的 SSL 证书验证错误 - 根本原因是什么?
问题描述
我的应用程序使用 Close API ( https://developer.close.com/ ) 来存储用户数据。我们的测试环境现在在尝试写入时出现 SSL 错误:
Faraday::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (certificate has expired))
原因可能是什么?我阅读错误消息的第一个假设是关闭证书可能已过期。但这似乎不太可能 - 服务通常维护良好,我们在生产中没有任何问题。
我考虑的下一件事是,我们服务器上的证书存储可能已经过时了。这不会让我感到惊讶,因为服务器运行的是 Ubuntu 14,而其他人在那里遇到了问题。但是我们有多台配置相同的机器,只有一台给我们带来了麻烦。这可能是根本原因吗?
解决方案
重现:
$ openssl s_client -CApath /dev/null -showcerts -connect api.close.com:443 -servername api.close.com
CONNECTED(00000003)
depth=3 O = Digital Signature Trust Co., CN = DST Root CA X3
verify error:num=10:certificate has expired
notAfter=Sep 30 14:01:15 2021 GMT
verify return:0
问题原来是最近弃用了 DST 根证书。旧的根证书 (DST) 已于 9 月 30 日弃用,现在需要使用现代版本 (ISRG)。
测试服务器仍然安装了 DST 和 ISRG 证书,而所有其他机器只安装了 ISRG。我假设关于这个特定 API 的某些东西优先寻找 DST 证书并忽略 ISRG,除非它是唯一的。
解决方法:从中删除 DST 证书/usr/share/ca-certificates/mozilla
并将 ISRG 保留在那里 - 尝试上面的 openssl 命令,现在它可以工作了。
推荐阅读
- r - 在单个图中绘制多个扬声器的凝视运动
- java - 动态显示树结构/类别视图的所有级别
- sql - 用作表达式的子查询返回的 PostgreSQL 错误不止一行
- php - 正则表达式模式匹配数字,但也混合数字
- azure - 当 sink 是二进制数据集时,源必须是二进制
- python - 当我尝试安装 psycorg2 时遇到一个巨大的错误
- excel - VBA PasteSpecial 有时会从其他(未给出一个)单元格粘贴数据
- spfx - 涉及“Person”字段的 SPFx CRUD 操作是否过于困难?
- kdb - 如何在 kdb+ 中存储聚合数据
- tensorflow - Keras GlobalMaxPooling2D TypeError:('关键字参数不理解:','keepdims')