使用有效Let's Encrypt证书时Axios仍报certificate has expired错误
根因说明
该问题由Let's Encrypt 2021年9月DST Root CA X3根证书过期事件触发,和你当前使用的叶子证书本身有效期无关:
- Chrome等现代浏览器内置了Let's Encrypt新的ISRG Root X1根证书,校验时会优先选择新根路径,忽略已过期的旧根证书链,因此访问正常
- Electron内置的Node.js TLS校验逻辑与浏览器不同,你使用的Electron版本对应的Node.js版本未优化证书链校验优先级,会优先匹配旧的DST Root CA X3根证书路径,检测到根证书过期后就会直接抛出错误,不会再尝试其他有效的证书链路径
可用解决方案
- 方案一:将Electron升级到15.0及以上版本,该版本开始内置的Node.js已经完成根证书更新和校验逻辑优化,可直接规避该问题
- 方案二:如果无法升级Electron,可在Axios请求配置中新增
ca参数,手动传入ISRG Root X1根证书内容,指定信任该根证书完成校验 - 方案三:在服务端调整证书链配置,停用面向旧安卓设备的交叉签名链,直接返回仅由ISRG Root X1签名的证书链,所有客户端校验时都会直接走新根路径,不会触发过期错误
- 临时验证方案:可在Axios请求配置中添加
rejectUnauthorized: false关闭证书校验,确认是根证书问题后再使用上述正式方案修复,该方案存在安全风险,禁止在生产环境使用
内容的提问来源于stack exchange,提问作者JaviOverflow
相关产品推荐
相关产品推荐

