调用OpenSea API返回CERT_HAS_EXPIRED证书过期错误如何解决
错误原因
你使用的Node v8.11.2版本内置的根证书信任库过旧,2021年Let's Encrypt的旧DST Root CA X3根证书正式过期后,该版本Node默认不信任OpenSea API所用的ISRG Root X1新根证书,因此发起HTTPS请求时触发证书过期报错。
修复方案
- 优先方案:升级Node版本
你当前降级到v8.11.2完全没有必要,目前OpenSea官方SDK兼容Node v14及以上的稳定版本,直接升级到Node v16或v18的LTS长期支持版本,即可自动获得最新的根证书信任库,从根源解决证书校验问题。 - 临时测试方案:禁用证书校验(仅本地测试使用,禁止生产环境使用)
运行脚本时添加环境变量跳过TLS证书校验,启动命令修改为:NODE_TLS_REJECT_UNAUTHORIZED=0 node sell.js
注意该方案会关闭所有HTTPS安全校验,存在数据被窃听、篡改的风险,仅可用于本地临时调试。 - 兼容旧Node方案:手动注入根证书(如果必须保留Node v8.11.2版本)
首先安装根证书依赖:npm install ssl-root-cas --save
之后在你的sell.js代码最开头添加以下内容,手动引入有效的ISRG Root X1根证书:
const rootCas = require('ssl-root-cas/latest').create(); rootCas.addFile(require.resolve('ssl-root-cas/pems/isrgrootx1.pem')); require('https').globalAgent.options.ca = rootCas;
额外注意事项
你代码中配置的Rinkeby测试链早已停止服务,OpenSea当前支持的测试链为Goerli、Sepolia,需要将代码中Network.Rinkeby替换为对应测试链的枚举值,否则后续请求也会报错。
内容的提问来源于stack exchange,提问作者Vasco Oliveira
相关产品推荐
相关产品推荐

