VPN, прокси и фильтры
Сертификаты корпоративного прокси ломают инструменты Терминала на Mac
Некоторые корпоративные сети проверяют трафик HTTPS. Прокси подписывает трафик корневым сертификатом компании, и инструменты, которые ему не доверяют, перестают работать.
Симптомы
- npm или Node показывает “self-signed certificate in certificate chain” или “unable to get local issuer certificate”.
- Git показывает “SSL certificate problem” для удалённых репозиториев по HTTPS.
- Safari открывает сайт, а curl или Python — нет.
- Ошибки появляются только в корпоративной сети или через VPN.
Вероятные причины
- Проверка TLS. Прокси заменяет сертификат сайта на сертификат, подписанный корневым сертификатом компании.
- Разные хранилища доверенных сертификатов. Safari использует связку ключей macOS. Многие инструменты командной строки используют свой список доверенных сертификатов.
- Не задан прокси. Инструменты в Терминале не всегда используют системный прокси. Им нужны переменные прокси или собственная настройка.
Как проверить
Покажите цепочку сертификатов, которую отправляет сервер. Посмотрите на издателя верхнего сертификата.
openssl s_client -connect registry.npmjs.org:443 -servername registry.npmjs.org -showcerts </dev/nullПокажите рукопожатие TLS с помощью curl.
curl -v https://registry.npmjs.org/ -o /dev/nullНайдите корневой сертификат компании в приложении «Связка ключей». Поищите название компании в связке ключей «Система».
Покажите переменные прокси в своей оболочке.
env | grep -i proxy
Как исправить
Получите корневой сертификат компании в ИТ-отделе в виде файла PEM. Не доверяйте сертификату из неизвестного источника.
Для инструментов на Node.js укажите файл в
NODE_EXTRA_CA_CERTS. После этого перезапустите инструмент.export NODE_EXTRA_CA_CERTS=~/certs/company-root.pemВ Node.js 22.19, 24.6 или новее можно использовать сертификаты, которым доверяет связка ключей.
export NODE_USE_SYSTEM_CA=1Для npm задайте файл сертификата.
npm config set cafile ~/certs/company-root.pemДля Git задайте файл сертификата.
git config --global http.sslCAInfo ~/certs/company-root.pemДля curl укажите файл с помощью
--cacert.curl --cacert ~/certs/company-root.pem https://example.comЗадайте корпоративный прокси для инструментов Терминала, если ваш ИТ-отдел его использует.
export https_proxy=http://proxy.example.com:8080Не отключайте проверку сертификатов, например
strict-sslилиhttp.sslVerify. Это делает подключение небезопасным.
С Kilobat
Проверка подключения Kilobat показывает сбой TLS как отдельный уровень. Она также сообщает, если через системный прокси подключение работает, а напрямую — нет.
kilobat why https://registry.npmjs.org/Добавьте
--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
- Документация npm: config (cafile, proxy, https-proxy, strict-ssl)
- git-config(1), http.sslCAInfo и http.proxy, man-страница из macOS 27.2 (Git 2.56)
- Поддержка Apple: изменение настроек доверия для сертификата в приложении «Связка ключей»
- curl(1), man-страница из macOS 27.2
Источники проверены 29 октября 2026 г. Man-страницы — те, что установлены вместе с macOS; откройте любую командой man <name> в Терминале.