VPN, прокси и фильтры

Сертификаты корпоративного прокси ломают инструменты Терминала на Mac

Некоторые корпоративные сети проверяют трафик HTTPS. Прокси подписывает трафик корневым сертификатом компании, и инструменты, которые ему не доверяют, перестают работать.

Относится к: всем актуальным версиям macOS. Для NODE_USE_SYSTEM_CA в Node.js нужен Node.js 22.19, 24.6 или новее.Проверено: 29 октября 2026 г.

Симптомы

  • 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. Многие инструменты командной строки используют свой список доверенных сертификатов.
  • Не задан прокси. Инструменты в Терминале не всегда используют системный прокси. Им нужны переменные прокси или собственная настройка.

Как проверить

  1. Покажите цепочку сертификатов, которую отправляет сервер. Посмотрите на издателя верхнего сертификата.

    openssl s_client -connect registry.npmjs.org:443 -servername registry.npmjs.org -showcerts </dev/null
  2. Покажите рукопожатие TLS с помощью curl.

    curl -v https://registry.npmjs.org/ -o /dev/null
  3. Найдите корневой сертификат компании в приложении «Связка ключей». Поищите название компании в связке ключей «Система».

  4. Покажите переменные прокси в своей оболочке.

    env | grep -i proxy

Как исправить

  1. Получите корневой сертификат компании в ИТ-отделе в виде файла 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. Задайте корпоративный прокси для инструментов Терминала, если ваш ИТ-отдел его использует.

    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, чтобы использовать переменные прокси из окружения этого приложения.

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

Вопросы

Почему Safari работает, а npm — нет?

Safari доверяет сертификатам из связки ключей macOS. npm использует сертификаты, встроенные в Node.js, если не добавить сертификат компании.

Безопасно ли задать strict-ssl false?

Нет. Это отключает все проверки сертификатов для реестра. Лучше добавьте корневой сертификат компании.

Источники

Источники проверены 29 октября 2026 г. Man-страницы — те, что установлены вместе с macOS; откройте любую командой man <name> в Терминале.