公司网络下 Codex 登录失败:TLS 代理与 `CODEX_CA_CERTIFICATE` 的排查顺序

2026-08-09

在家里装好 Codex(OpenAI Codex)的 CLI,codex login 一路顺;第二天到公司连上办公网,同一台笔记本、同一个版本,登录就是过不去。这类问题在有 TLS 中间代理或者自建根 CA 的公司网络里很常见,但排查最怕的是一上来就乱改配置——改完既不知道有没有生效,也不知道原来的问题是不是这个。

先说清楚本文的边界:我们没有在受 TLS 代理的网络里复现过登录失败,所以下面不会给”失败时报错长什么样”的具体文案,也不会编造任何社区偏方。文中标「本机实测」的部分,全部来自 codex-cli 0.147.0(Windows 11)上跑的只读命令;处置办法一律来自官方文档。

一、现象:登录这一步和”用不用得了”是两回事

典型表现是:换到公司网络后 codex login 走不完,浏览器那一步要么打不开、要么打开了回调不回来。有几个特征值得留意——同一台机器换成手机热点就正常、同事在公司网络里也一样登不上、公司其它需要联网的开发工具最近也做过证书导入。这几条一起出现,方向基本就指向办公网的 TLS 拦截或私有根 CA。

另一类容易和它混在一起的现象是:登录本身早就完成过,只是今天用起来不对劲。这两件事必须拆开查,否则你会拿着”证书”这把钥匙去开一把根本不是这个锁的门。

二、怎么确认是这个问题:三条只读命令

这三条都不改任何东西,可以放心在公司电脑上跑。

第一步,先确认版本。

codex --version

别嫌这步多余。本机实测过一件事:同一台机器上,采集开头执行这条命令得到 codex-cli 0.131.0,十几分钟后再执行得到 codex-cli 0.147.0,而 which -a codex 全程只有一个可执行文件。Codex 具备自更新能力(配置里 check_for_update_on_startup 默认 true),所以”我记得我装的是某个版本”不作数,一切以当次输出为准。跟同事对问题、往工单里贴信息,都用这一行的实时结果。

第二步,看登录状态。

codex login status

在 codex-cli 0.147.0(Windows 11)上,已登录时它输出一行 Logged in using ChatGPT。如果这里显示的是已登录,那你今天遇到的问题多半不在登录环节,可以直接跳到第五节。

第三步,跑体检。

codex doctor --summary

在 codex-cli 0.147.0(Windows 11)上,这条命令的输出按组排列,和本篇直接相关的是这几行:

  • Connectivity 组下有 networkwebsocketreachability 三项。本机 websocket 一行显示 connected (HTTP 101 Switching Protocols) · 15s timeoutreachability 的说明是 active provider endpoints are reachable over HTTP。
  • Configuration 组下有 config(本机 loaded)和 auth(本机 auth is configured)。
  • 结尾有一行统计,格式形如 17 ok · 1 idle · 1 notes · 0 warn · 0 fail,状态符号有四种:(ok)、(idle)、(notes/warn)、(fail)。

判断依据很直接:Connectivity 这三项是不是绿的,决定了你该不该往证书方向查。如果 network / websocket / reachability 里有 ,而换个网络就恢复,那基本坐实是网络这一层被动了手脚。

要把结果贴给 IT 或者贴进工单,用 codex doctor --json——它的官方说明是 “Emit a redacted machine-readable report”,是脱敏报告。同理,codex mcp listEnv 列会把环境变量的值打成 ***** 只留键名,也可以安全外传。但 ~/.codex/auth.json 绝对不行,官方原话是 “Treat ~/.codex/auth.json like a password: it contains access tokens. Don’t commit it, paste it into tickets, or share it in chat.”

第四步,翻登录日志。 官方明确写了:登录失败的诊断信息写在配置的日志目录里的 codex-login.log。日志目录由配置键 log_dir 决定,默认是 $CODEX_HOME/log,也就是通常的 ~/.codex/log。本机在这个目录下观测到 codex-tui.logcodex-login.log 按官方说明是失败时才有诊断内容可看的那一个。

三、官方给的处置:登录前设置 CODEX_CA_CERTIFICATE

官方文档的登录排查一节里,针对公司网络(TLS 代理或私有根 CA)只给了一条处置:登录前设置环境变量 CODEX_CA_CERTIFICATE

两个字要抠死:一个是”登录前”,一个是”环境变量”。这意味着它必须在你执行 codex login 的那个 shell 会话里已经存在,写进 config.toml 是没用的——它不是配置键。

# Windows PowerShell:在当前窗口里设置,然后在同一个窗口登录
$env:CODEX_CA_CERTIFICATE = "<你的企业根证书>"
codex login
# macOS / Linux / Git Bash
export CODEX_CA_CERTIFICATE="<你的企业根证书>"
codex login

这里必须说实话:我们核对到的官方页面只说明了「登录前设置 CODEX_CA_CERTIFICATE」,没有给出取值格式——是证书文件路径还是证书内容,本文不替你猜,所以上面用的是占位符。这一项请以官方 Authentication 页为准,或者直接问公司 IT 要他们统一的填法。名字和取值格式这种事,猜错了你会得到一个和原来一模一样的失败,白白多绕一天。

顺带把周边几件事一起交代清楚:

机器上没有浏览器(跳板机、远程开发机)。 官方首选给的是设备码登录,注意它标注为 beta

codex login --device-auth

按提示在另一台有浏览器的机器上打开链接、输入一次性验证码。官方还给了两条备选:一是从有浏览器的机器上复制已缓存的凭据;二是用 SSH 隧道把 localhost 回调端口 1455 转发过去。第二条对本篇尤其有用——如果你的公司网络拦的是回调,而不是证书,隧道这条路比折腾证书更对症。

改用 API key 登录。 这是换一种认证方式,不是修 TLS 问题。官方给的 CLI 写法是通过管道把 key 传进去:

printenv OPENAI_API_KEY | codex login --with-api-key

这是官方的 POSIX shell 示例,PowerShell 里没有 printenv,本文不替你改写成”类似的命令”。更要紧的是计费口径不同:ChatGPT 登录走的是 ChatGPT workspace 凭据,遵循 workspace 权限、RBAC 与企业留存设置;API key 则是按标准 API 费率通过 OpenAI Platform 账户计费。公司里这两条路往往归不同的人管,别自作主张切换。

受管环境可能已经替你定了规矩。 配置里有三个和登录直接相关的键:chatgpt_base_urlforced_login_method(取值 chatgptapi)、forced_chatgpt_workspace_id。如果公司 IT 下发过配置,forced_login_method 有可能已经被钉死成某一种,你按另一种方式折腾多久都不会成。

凭据存哪儿。 配置键 cli_auth_credentials_store 默认 auto,可选 filekeyring。存 file 就是 ~/.codex/auth.json 这个明文文件,存 keyring 则是交给操作系统的凭据存储(Windows 上即凭据管理器)。

以上配置键均按官方文档键位引用,未逐项实测,以官方文档为准。

四、处置完怎么验证

别用”再试一次看看”来验证,按这三条走:

  1. codex login status——在 codex-cli 0.147.0(Windows 11)上,成功态是 Logged in using ChatGPT 这一行。
  2. codex doctor --summary——重点看 Configuration 组的 auth 是不是 auth is configured,Connectivity 组三项有没有 ,以及结尾统计行里 fail 的数字。
  3. 再看一次 codex-login.log——处置前后各看一次,才知道是真的好了,还是恰好这次网络抖过去了。

有一个坑要单独提醒:配置文件坏掉的时候,doctor 照样能跑完。本机实测过,故意给 -c 传一段语法不合法的 TOML,命令没有崩溃退出,doctor 正常跑到底,只是多出这么一行:

✗ config       config could not be loaded - Fix the reported config error, then rerun codex doctor.

所以看 doctor 输出时,别只盯着 Connectivity,config 那一行也要扫一眼。它没加载成功的话,你刚才改的一切都是空谈。

五、什么情况说明不是证书的事

排查最忌一条道走到黑。下面几种迹象出现,就该掉头:

  • codex doctor --summary 的 Connectivity 三项全绿,但登录仍不成。 网络这一层已经通了,再去导证书是浪费时间,把注意力转到 forced_login_method 是否被强制、chatgpt_base_url 是否被改过、codex-login.log 里写了什么。
  • doctor 里出现 ✗ config 先把配置修好再谈别的,配置没加载成功的状态下任何”改配置”都不会生效。
  • codex login status 显示已登录,问题出在用的时候。 那就不是登录链路的问题,本文这套排查对它没用。
  • 登录前后版本号对不上。 前面说过 Codex 会自更新,你可能是在 A 版本上遇到问题、在 B 版本上验证的。每次都重新跑 codex --version
  • 别把沙箱的网络开关当登录问题治。 配置里确实有 sandbox_workspace_write.network_access,也有 features.network_proxy(标注为 experimental,默认 false)。但官方的登录排查一节里只提到 CODEX_CA_CERTIFICATE,没提这些键——它们管的是会话里的沙箱化命令,不是登录本身。
  • 你用的不是 CLI。 桌面应用的登出界面给的是 “Continue to sign in”(ChatGPT)与 “Sign in another way”(API key),IDE 扩展给的是 “Sign in with ChatGPT” 与 “Use API Key”。这两条路是官方文档口径,我们没有实测,界面上的具体走向请以官方说明为准。

最后一句大实话:在公司网络这种你没有完全掌控权的环境里,最有效的排查动作往往不是改命令,而是先用 codex doctor --json 出一份脱敏报告,连同 codex --version 的实时输出一起找 IT 对齐——办公网到底有没有做 TLS 中间拦截、公司统一的根 CA 该怎么给到工具,这些答案在他们手上,不在你的 config.toml 里。

相关阅读


本文依据 Codex 官方文档(learn.chatgpt.com/docs/ 的《Authentication》《Codex CLI》《Configuration Reference》页面)整理,核对日 2026-08-09;文中标注「本机实测」的部分基于 codex-cli 0.147.0 / Windows 11 环境下的只读命令输出。产品功能、模型与价格以官方最新说明为准。桌面应用与云端部分为官方文档口径,非本机实测。

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。