使用Iron Worker发起请求时出现CERT_HAS_EXPIRED证书过期错误求助
Iron Worker 请求证书过期报错排查方案
你遇到的报错如下:
{ [FetchError: request to https://xxxx/api/send-mail failed, reason: certificate has expired] message: 'request to https://xxxx/api/send-mail failed, reason: certificate has expired', type: 'system', errno: 'CERT_HAS_EXPIRED', code: 'CERT_HAS_EXPIRED' }
在已确认源站证书正常的前提下,可按以下优先级排查:
- 核验Iron Worker运行环境的根证书库
多数Serverless运行环境的根CA证书列表更新滞后,若你的站点使用了近年新投产的根CA(比如Let's Encrypt的ISRG Root X1),旧版本的Iron Worker镜像中可能没有收录对应根CA,导致证书校验失败。你可以在测试任务中打印请求目标返回的完整证书链,和你本地核验的源站证书链做比对,确认是否存在根证书缺失的问题。 - 排查请求链路中间节点证书
如果Iron Worker的出口流量经过平台自带的代理、WAF,或是你自行配置的转发网关,可能是中间节点的证书过期,而非你的源站证书。可在Iron Worker任务中执行openssl s_client -connect 你的域名:443 -servername 你的域名,输出的证书有效期、颁发者信息和源站证书不一致的话,即可定位是中间链路的问题。 - 检查请求SNI配置
若你的源站同IP部署了多个HTTPS站点,旧版本的HTTP请求库发起请求时可能没有携带SNI扩展,导致服务器返回了同IP下其他站点的过期证书。你可以在请求代码中显式开启SNI配置,验证是否能解决问题。 - 临时校验方案
排查阶段可以在请求配置中临时添加rejectUnauthorized: false(Node.js环境下fetch、axios等库均支持该参数)跳过证书校验,确认请求是否能正常通,先排除非证书类的其他问题,注意该配置仅可用于测试,生产环境禁止开启。
内容的提问来源于stack exchange,提问作者Roniedo
相关产品推荐
相关产品推荐

