---
title: "Mac 上 npm、Git、curl 的公司代理伺服器憑證錯誤 · Kilobat 指南"
url: "https://kilobat.app/zh-hant/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 安全嗎？**

不安全。這會停止對套件登錄的所有憑證檢查。請改為加入公司的根憑證。

## 資料來源

- [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-hant/guides/homebrew-npm-download-fails.html): Homebrew 使用 curl 和 Git 下載。
- [代理伺服器設定讓 Mac 上的 App 無法連線](https://kilobat.app/zh-hant/guides/proxy-settings-breaking-apps.html): 代理伺服器設定會讓流量經由另一台伺服器傳送。
- [Mac 上的「此連線不是私人連線」與憑證警告](https://kilobat.app/zh-hant/guides/connection-not-private-mac.html): Safari 無法確認網站的身分時，就會顯示憑證警告。
- [Mac 上的 SSH 和 Git 逾時](https://kilobat.app/zh-hant/guides/ssh-git-timeouts.html): SSH 和 Git 需要與伺服器之間有正常的 TCP 連線。
