---
title: "Mac 上 npm、Git、curl 的公司代理证书错误 · Kilobat 指南"
url: "https://kilobat.app/zh-hans/guides/corporate-proxy-certificates.html"
description: "在公司代理后修复 npm、Node、Git、curl 和 Homebrew 中的“unable to get local issuer certificate”，无需关闭证书检查。"
---

VPN、代理与过滤器

# Mac 上公司代理证书导致“终端”工具出错

一些公司网络会检查 HTTPS 流量。代理会用公司根证书为流量重新签名，不信任该证书的工具就会报错停止。

适用于：所有当前 macOS 版本。Node.js `NODE_USE_SYSTEM_CA` 需要 Node.js 22.19、24.6 或更高版本。 · 核查日期：2026年10月29日

## 症状

- npm 或 Node 显示“self-signed certificate in certificate chain”或“unable to get local issuer certificate”。
- Git 对 HTTPS 远程仓库显示“SSL certificate problem”。
- Safari 浏览器能打开网站，但 curl 或 Python 不能。
- 错误只在公司网络或 VPN 上出现。

## 可能的原因

- **TLS 检查。**代理会把网站的证书替换为由公司根证书签名的证书。
- **各自独立的信任存储。**Safari 浏览器使用 macOS 钥匙串，而许多命令行工具使用自己的受信任证书列表。
- **缺少代理设置。**“终端”中的工具并不总是使用系统代理，它们需要代理环境变量或自己的设置。

## 如何检查

1. 显示服务器发送的证书链，查看最顶层证书的颁发者。

   ```
   openssl s_client -connect registry.npmjs.org:443 -servername registry.npmjs.org -showcerts </dev/null
   ```
2. 用 curl 显示 TLS 握手过程。

   ```
   curl -v https://registry.npmjs.org/ -o /dev/null
   ```
3. 在“钥匙串访问”中找到公司根证书：在“系统”钥匙串中搜索公司名称。
4. 显示 shell 中的代理环境变量。

   ```
   env | grep -i proxy
   ```

## 如何修复

1. 向 IT 团队索取 PEM 格式的公司根证书文件。不要信任来源不明的证书。
2. 对于 Node.js 工具，用 `NODE_EXTRA_CA_CERTS` 指定该文件。设置后重新启动工具。

   ```
   export NODE_EXTRA_CA_CERTS=~/certs/company-root.pem
   ```
3. 在 Node.js 22.19、24.6 或更高版本中，可以直接使用钥匙串信任的证书。

   ```
   export NODE_USE_SYSTEM_CA=1
   ```
4. 为 npm 设置证书文件。

   ```
   npm config set cafile ~/certs/company-root.pem
   ```
5. 为 Git 设置证书文件。

   ```
   git config --global http.sslCAInfo ~/certs/company-root.pem
   ```
6. 对于 curl，用 `--cacert` 指定该文件。

   ```
   curl --cacert ~/certs/company-root.pem https://example.com
   ```
7. 如果 IT 团队使用公司代理，请为“终端”工具设置该代理。

   ```
   export https_proxy=http://proxy.example.com:8080
   ```
8. 不要关闭证书检查，例如 `strict-ssl` 或 `http.sslVerify`。这会让连接变得不安全。

## 使用 Kilobat

1. Kilobat 的连接检查会把 TLS 失败作为单独的一层报告。如果直连失败而系统代理可用，它也会指出来。

   ```
   kilobat why https://registry.npmjs.org/
   ```
2. 添加 `--app`，即可使用该 App 环境中的代理变量。

   ```
   kilobat why https://registry.npmjs.org/ --app process:node
   ```

## 常见问题

**为什么 Safari 浏览器正常，npm 却失败？**

Safari 浏览器信任 macOS 钥匙串中的证书。npm 使用 Node.js 自带的证书，除非添加了公司证书。

**把 strict-ssl 设为 false 安全吗？**

不安全。这会停止对该 registry 的所有证书检查。请改为添加公司根证书。

## 参考资料

- [Node.js：Command-line API、NODE_EXTRA_CA_CERTS 和 --use-system-ca](https://nodejs.org/api/cli.html)
- [npm Docs：config（cafile、proxy、https-proxy、strict-ssl）](https://docs.npmjs.com/cli/v11/using-npm/config)
- git-config(1)、http.sslCAInfo 和 http.proxy，macOS 27.2 自带的 man 手册页（Git 2.56）
- [Apple 支持：在“钥匙串访问”中更改证书的信任设置](https://support.apple.com/guide/keychain-access/kyca11871)
- curl(1)，macOS 27.2 自带的 man 手册页

参考资料核查于 2026年10月29日。man 手册页为 macOS 自带版本；在“终端”中用 `man <name>` 打开。

## 相关指南

- [Mac 上 Homebrew 或 npm 下载失败](https://kilobat.app/zh-hans/guides/homebrew-npm-download-fails.html): Homebrew 通过 curl 和 Git 下载。
- [Mac 上代理设置导致 App 无法连接](https://kilobat.app/zh-hans/guides/proxy-settings-breaking-apps.html): 代理设置会让流量经由另一台服务器转发。
- [Mac 上的“此连接非私人连接”与证书警告](https://kilobat.app/zh-hans/guides/connection-not-private-mac.html): Safari 浏览器无法确认网站身份时会显示证书警告。
- [Mac 上 SSH 和 Git 超时](https://kilobat.app/zh-hans/guides/ssh-git-timeouts.html): SSH 和 Git 需要与服务器之间有可用的 TCP 连接。
