Codex CERT_HAS_EXPIRED 证书过期错误处理

错误现象

在使用 Codex 命令行或者通过 Codex 相关 SDK 调接口时,偶尔会遇到 CERT_HAS_EXPIRED。这个错误一般不是代码逻辑问题,而是 HTTPS TLS 握手阶段证书校验失败。

常见报错长这样:

### token云桥中转 0029.org ###
Error: certificate has expired
code: 'CERT_HAS_EXPIRED'

FetchError: request to https://api.openai.com/v1/... failed, reason: certificate has expired

UNABLE_TO_VERIFY_LEAF_SIGNATURE
CERT_HAS_EXPIRED

我一般先不急着改业务代码,先查三件事:本机时间、访问链路里有没有代理、系统 CA 证书是否过旧。多数问题都出在这三个地方。

先判断是不是本机时间问题

TLS 证书都有有效期。如果本机时间快了几个月,或者容器里的时间不对,正常证书也会被判断为过期。

Linux / macOS 查看时间

date
date -u

如果是在服务器上,顺手看一下时区和 NTP 状态:

timedatectl
timedatectl status

如果时间明显不对,先同步时间:

sudo timedatectl set-ntp true
sudo systemctl restart systemd-timesyncd

macOS 可以在“系统设置 - 日期与时间”里打开自动设置,也可以检查:

sudo sntp -sS time.apple.com

如果是 Docker 容器里报错,要先确认宿主机时间正常。容器通常跟随宿主机,宿主机时间错了,容器里也会错。

确认到底是谁的证书过期

CERT_HAS_EXPIRED 不一定表示 OpenAI 或 Codex 服务端证书过期,也可能是公司代理、抓包工具、网关、防火墙替换了证书。排查时要看实际拿到的证书链。

用 openssl 查看证书有效期

openssl s_client -connect api.openai.com:443 -servername api.openai.com </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates

正常会看到类似:

subject=...
issuer=...
notBefore=...
notAfter=...

重点看 issuernotAfter。如果 issuer 是公司内网 CA、代理软件 CA、某个安全网关,而不是公共 CA,那说明请求经过了 HTTPS 中间代理。这个时候修复方向就不是更新 Codex,而是处理代理证书。

用 curl 看握手细节

curl -v https://api.openai.com/v1/models

没有 token 时返回 401 是正常的,说明 TLS 至少通过了。真正需要关注的是前面有没有:

SSL certificate problem: certificate has expired

如果 curl 都过不了,Codex 基本也过不了。先修系统环境,不要在应用层绕。

常见原因和修复顺序

1. 系统 CA 证书太旧

老服务器、精简 Docker 镜像、很久没更新的开发机,比较容易出现 CA 根证书过期或缺失。

Debian / Ubuntu:

sudo apt update
sudo apt install --reinstall ca-certificates
sudo update-ca-certificates

CentOS / RHEL:

sudo yum reinstall ca-certificates
sudo update-ca-trust force-enable
sudo update-ca-trust extract

Alpine:

apk add --no-cache ca-certificates
update-ca-certificates

macOS 如果是 Homebrew 环境,可以更新证书包和相关依赖:

brew update
brew upgrade ca-certificates openssl

修完之后重新打开一个终端再试,避免旧进程还拿着旧环境变量。

2. Node.js 使用的证书链有问题

不少 Codex CLI 或调用脚本跑在 Node.js 里。Node 的 TLS 校验可能受环境变量影响,比如 NODE_EXTRA_CA_CERTSHTTPS_PROXYSSL_CERT_FILE

先检查环境变量:

env | grep -i proxy
env | grep -i cert

如果看到类似:

NODE_EXTRA_CA_CERTS=/path/to/old-company-ca.pem
SSL_CERT_FILE=/tmp/expired.pem
HTTPS_PROXY=http://127.0.0.1:7890

就要重点看这些文件和代理。尤其是公司 CA 文件,很多人离职交接、换电脑、换 VPN 后一直没更新,最后表现出来就是 CERT_HAS_EXPIRED

临时排查时可以开一个干净 shell:

unset NODE_EXTRA_CA_CERTS
unset SSL_CERT_FILE
unset HTTPS_PROXY
unset HTTP_PROXY
unset ALL_PROXY

然后再运行 Codex 命令。如果恢复正常,就说明问题在代理或自定义证书链。

3. 代理或抓包工具证书过期

如果你使用 Clash、Charles、Fiddler、公司网关、VPN 代理,经常会碰到代理签发的本地证书过期。浏览器可能已经信任新证书,但命令行环境未必同步。

处理思路:

  • 更新代理软件到较新版本;
  • 重新生成并安装代理根证书;
  • 确认 Node.js 或系统命令行能读取到这个根证书;
  • 不需要代理时,先关闭代理再验证一次。

如果只是为了稳定调用接口,也可以考虑走一个维护较好的中转服务。我自己在排查网络和证书问题时,会把 token云桥AI中转站 0029.org 作为备选链路测试一下,至少能快速判断问题是在本机证书链,还是出站网络本身不稳定。

Codex 侧的检查

如果系统证书和网络都确认没问题,再看 Codex 工具本身是否过旧。先查看版本:

codex --version
node -v
npm -v

如果 Codex 是通过 npm 安装的,可以尝试更新:

npm update -g
npm install -g @openai/codex

如果项目里固定了依赖版本,则在项目目录里更新:

npm outdated
npm update

注意不要为了“先跑起来”直接设置:

NODE_TLS_REJECT_UNAUTHORIZED=0

这个变量会关闭 TLS 证书校验,只适合极短时间定位问题,不建议写进脚本、Dockerfile、CI 配置或系统环境变量。否则后面真正遇到中间人攻击或错误域名证书时,程序也会照样放行。

修复后的验证方式

修完不要只看 Codex 命令是否不报错,建议按顺序验证:

1. 验证系统 TLS

curl -I https://api.openai.com

能看到 HTTP 响应头即可,401、404 都不代表 TLS 失败。

2. 验证证书有效期

openssl s_client -connect api.openai.com:443 -servername api.openai.com </dev/null 2>/dev/null | openssl x509 -noout -dates

确认 notAfter 是未来时间。

3. 验证 Node.js HTTPS

node -e "fetch('https://api.openai.com').then(r=>console.log(r.status)).catch(e=>console.error(e.code,e.message))"

如果这里不再出现 CERT_HAS_EXPIRED,说明 Node 的证书校验已经正常。

4. 再运行 Codex

codex --version
codex

或者执行你原来报错的命令。此时如果变成鉴权失败、额度不足、模型不存在等错误,说明证书问题已经过去了,需要按新的错误继续排查。

避免复发的几个习惯

  • 服务器和开发机开启自动时间同步,不要手动改系统时间后忘记恢复;
  • 基础镜像里显式安装 ca-certificates,不要用过旧镜像长期不更新;
  • 公司代理证书到期前统一更新,命令行环境也要同步信任;
  • CI/CD 里不要固定很老的 Node.js 和系统镜像;
  • 不要长期保留 NODE_TLS_REJECT_UNAUTHORIZED=0 这类临时变量。

总结

Codex 遇到 CERT_HAS_EXPIRED,优先按“本机时间、系统 CA、代理证书、Node 环境变量、Codex 版本”这个顺序排查。大多数情况下,问题不在业务代码,而在 TLS 证书链或出站网络链路。修复后用 curlopenssl、Node fetch 和 Codex 原命令逐层验证,能更快确认问题是否真正解决。

代码转载自:https://pan.quark.cn/s/8ce4326d996e 对于在 CentOS 7 系统中修改网卡配置文件后无法使设置生效的情况,经过实践验证,可以通过使用 nmcli 命令来进行调整。完成修改之后,需要重新启动虚拟机以使更改生效,这样操作流程即告完成。如果设置仍然无法生效,则表明虚拟机在启动过程中所获取的 IP 地址配置并非针对 eth0,此时可以对其它网卡的配置文件进行修改或将其移除。在 CentOS 7 系统中,网络配置的管理机制与早期版本存在差异,主要体现为采用了 Network Manager 服务来负责网络接口的管理。在某些情形下,尽管修改了 `/etc/sysconfig/network-scripts` 目录下的 `ifcfg-eth0` 文件,但网络配置却未能即时生效。此类问题的发生通常源于 CentOS 7 采用了不同于以往的配置读取方法。接下来将具体阐述如何借助 nmcli 命令来处理这一挑战。 以 root 用户身份登录系统并打开终端界面。nmcli 是 Network Manager 提供的命令行界面工具,它支持在命令行环境下执行网络连接的建立、编辑、查询及管理任务。针对修改 eth0 网卡配置的需求,可以遵循以下步骤进行操作: 1. 导航至 `/etc/sysconfig/network-scripts` 目录: ``` cd /etc/sysconfig/network-scripts ``` 2. 检查该目录内是否存在 `ifcfg-eth0.bak` 文件,该备份文件可能是先前调整配置时遗留下来的,若存在可能造成冲突。若发现该文件,可以选择将其删除: ``` [root@localhost netw...
代码转载自:https://pan.quark.cn/s/46fd08fb879c 网管教程 从入门到精通软件篇 ★一。★详尽的xp修复控制台指令及其应用!!! 放入xp(2000)的光盘,安装时选择R,执行修复! Windows XP(涵盖 Windows 2000)的控制台指令是在系统遭遇某些意外状况时的一种极具效用的诊断、检测以及恢复系统功能的工具。笔者确实一直期望能够将这方面的指令进行归纳,此次由老范辛苦整理了这份极具价值的秘籍。 Bootcfg bootcfg 命令用于启动配置与故障恢复(对大多数计算机而言,即 boot.ini 文件)。 带有特定参数的 bootcfg 命令仅在运用故障恢复控制台时方可使用。能够在命令行界面下运用带有不同参数的 bootcfg 命令。 用法: bootcfg /default 设定默认引导选项。 bootcfg /add 向引导清单中增添 Windows 安装。 bootcfg /rebuild 重复整个 Windows 安装流程并让用户选择需添加的项目。 注意:运用 bootcfg /rebuild 之前,应先借助 bootcfg /copy 命令备份 boot.ini 文件。 bootcfg /scan 探查用于 Windows 安装的全部磁盘并展示结果。 注意:这些结果被静态存储,并用于当前会话。若在当前会话期间磁盘配置发生变动,为获取更新的探查结果,必须先重启计算机,然后再次探查磁盘。 bootcfg /list 列示引导清单中已有的项目。 bootcfg /disableredirect 在启动引导程序中禁用重定向。 bootcfg /redirect [ PortBaudRrate] |[ useBio...
代码下载链接: https://pan.quark.cn/s/fc524f791b68 AA制程,即Active Alignment,被理解为主动对准,是一种用于确定零部件装配中相对位置的方法。在摄像头封装阶段,涉及图像传感器、镜座、马达、镜头、线路板等多个部件的重复组装,而传统的封装设备如CSP及COB等,均是依据设备设定的参数进行零部件的移动装配,因而零部件的叠加误差会逐渐增大,最终在摄像头上表现为拍照最清晰的位置可能偏离画面中心、四边清晰度不均等现象。伴随智能手机和其他高端电子产品的普及,摄像头模组的性能正日益受到重视。高分辨率、卓越的低光表现以及稳定视频输出是现代用户所期望的。在摄像头模组的制造环节,各部件的精准定位对成像质量具有决定性作用。因此,一种名为“AA制程”(Active Alignment)的前沿技术被开发出来,成为摄像头精密对准的核心技术。 AA制程,即Active Alignment,是一种在摄像头封装过程中应用的主动对准方法。该方法在多个组件装配阶段发挥作用,涵盖图像传感器、镜座、马达、镜头和线路板等部件。传统的封装方式,例如CSP(Chip Scale Package)和COB(Chip On Board),依赖于设备预设的参数进行组装,但随着组件数量的增加,误差也会累积,最终影响摄像头的表现。例如在成像质量上可能出现中心位置偏移、四角清晰度不一致等问题。 AA制程技术的核心在于实时监测与主动调整。在组装过程中,它借助先进的检测设备持续监控半成品的状态,并根据实时信息对组装部件进行精确修正,从而显著降低装配误差。通过这种技术,能够确保摄像头模组中各组件的相对位置准确无误,从而使得最终的成像效果更加稳定,特别是在中心区域和四角的清晰度上...
内容概要:本文介绍了一套基于Matlab实现的光子晶体90度弯曲波导的二维时域有限差分法(2D FDTD)仿真代码,旨在通过数值模拟手段深入研究光子晶体波导中的光传播特性。该资源聚焦于电磁场与光子学领域的仿真技术应用,系统实现了FDTD算法在复杂介质结构中的建模过程,涵盖空间网格剖分、时间步进迭代、完美匹配层(UPML)边界条件处理、总场散射场(TFSF)激励源设置、介电常数分布定义及电磁场演化可视化等核心模块,能够有效分析光在90度弯曲波导中的传输效率、模式分布与反射损耗等关键性能指标。; 适合人群:具备电磁场理论基础和Matlab编程能力的研究生、科研人员以及从事光子晶体器件设计与仿真的工程技术人员。; 使用场景及目标:①用于教学演示FDTD方法的基本原理与算法流程,帮助理解麦克斯韦方程的离散化求解过程;②支撑科研工作中对光子晶体弯曲波导结构的传输特性进行仿真分析与性能优化;③作为开发更复杂光子集成器件(如分束器、滤波器)数值仿真工具的基础框架; 阅读建议:建议使用者结合经典FDTD教材(如Taflove著作)深入理解算法理论,并在Matlab环境中逐模块调试代码,重点关注电场与磁场的交替更新过程、UPML吸收边界的设计实现以及TFSF源的引入方式,从而全面提升对时域电磁仿真机制的掌握与应用能力。
内容概要:本文围绕直驱式永磁同步电机(PMSM)的矢量控制仿真模型展开研究,基于Simulink平台构建了完整的电机控制系统仿真模型,涵盖电机本体建模、坐标变换(如Clark变换与Park变换)、磁场定向控制(FOC)、电流环与速度环的PI调节、空间矢量脉宽调制(SVPWM)等核心技术环节,旨在实现对电机转矩与转速的高精度、动态响应良好的控制。通过系统化仿真验证控制策略的有效性与鲁棒性,深入分析各模块间的信号流向与控制逻辑,为电机驱动系统的设计与优化提供理论依据和技术支撑,是理论联系工程实践的重要桥梁。; 适合人群:具备电机学、电力电子与自动控制基础知识,熟悉Simulink/MATLAB仿真环境,从事电气工程、自动化、新能源车辆、智能制造等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解永磁同步电机矢量控制的核心原理与系统架构;②掌握在Simulink中从零开始搭建复杂电机控制系统的方法与技巧;③应用于课程设计、毕业论文、科研项目中的控制算法验证、参数整定与性能优化;④为后续的硬件在环(HIL)测试或实物系统开发奠定仿真基础。; 阅读建议:建议结合经典电机控制理论教材同步学习,注重理论推导与仿真实现的对应关系,动手实践模型搭建、参数调试与波形分析,特别关注PI控制器参数整定对系统稳定性、动态响应速度和抗干扰能力的影响,通过反复仿真迭代加深对控制机理的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值