Как подключить GigaChat к n8n в Docker без отключения TLS
При подключении GigaChat API к self-hosted n8n в Docker возникает ошибка SSL-верификации: Node.js не доверяет сертификатам Минцифры. Решение — добавить корневой сертификат через NODE_EXTRA_CA_CERTS, а не отключать проверку.
- Node.js использует корневые сертификаты NSS от Mozilla, куда не входит удостоверяющий центр Минцифры России
- Отключение проверки через NODE_TLS_REJECT_UNAUTHORIZED=0 действует на весь процесс и открывает путь для MITM-атак
- Правильный способ — прокинуть сертификат Минцифры в контейнер и указать переменную NODE_EXTRA_CA_CERTS

При деплое self-hosted n8n в Docker и попытке подключить GigaChat API разработчики сталкиваются с ошибкой UNABLE_TO_VERIFY_LEAF_SIGNATURE. Проблема в том, что рантайм Node.js доверяет корневым сертификатам NSS от Mozilla Foundation, а удостоверяющий центр Минцифры России в этот список не входит.
Почему возникает ошибка
Сертификаты для доменов Сбера подписывает Головной удостоверяющий центр Минцифры. При TLS-хендшейке Node.js не находит корневой сертификат в своём хранилище и разрывает соединение. Типичная ошибка выглядит так:
Error: unable to verify the first certificate
code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE'
Чем опасно отключение TLS
Популярный совет с форумов — выставить NODE_TLS_REJECT_UNAUTHORIZED=0 в docker-compose. Это отключает проверку сертификатов глобально для всего процесса Node.js: не только для GigaChat, но и для обращений к базам данных, вебхукам и Telegram Bot API. При компрометации маршрутизации злоумышленник может провести MITM-атаку и перехватить Bearer-токены.
Правильная настройка сертификатов
Нужно научить Node.js распознавать подпись Минцифры. На сервере собирается бандл из корневого и промежуточного сертификатов:
- Скачать
russian_trusted_root_ca.cerиrussian_trusted_sub_ca.cerс gu-st.ru - Объединить их в один файл
/opt/certs/russian_trusted_root_ca.crt - Прокинуть файл в контейнер через volume
- Указать переменную
NODE_EXTRA_CA_CERTS=/home/node/certs/russian_trusted_root_ca.crt
После рестарта контейнера проверять соединение нужно внутри контейнера, а не через openssl s_client — утилита не увидит переменную Node.js. Ответ 200 или 403 означает, что TLS работает.
Особенности n8n 1.x
В n8n 1.x прямой доступ к переменным окружения из нод заблокирован: попытка использовать $env.GIGACHAT_TOKEN выдаёт ExpressionError: access to env vars denied. Вместо снятия блокировки через N8N_BLOCK_ENV_ACCESS_IN_NODE=false рекомендуется завести ключ через Header Auth в Credentials.
Синдром Ивана
Отдельная история — галлюцинация GigaChat при обработке PII. Модель должна была извлекать имя клиента в поле first_name, но при отсутствии имени в сообщении подставляла самое частое русское имя из датасета — Иван. Бот начал приветствовать всех пользователей фразой «Здравствуйте, Иван». Проблему решили переписыванием промпта с запретом на домысливание и добавлением проверки имени в ноде Code.
Исходники docker-compose и готовый воркфлоу выложены в открытом репозитории n8n-gigachat-starter-kit.
Для профиТехнические детали: архитектура, цифры, ссылки
Стек: n8n в Docker, PostgreSQL в Docker, GigaChat API (Сбер) для обработки русскоязычных сообщений с учётом 152-ФЗ, Gemini Flash для скоринга. GigaChat выбран из-за размещения серверов в РФ.
Эндпоинт: https://gigachat.devices.sberbank.ru/api/v1/chat/completions
Сборка бандла сертификатов:
mkdir -p /opt/certs
curl -k -s https://gu-st.ru/content/Other/doc/russian_trusted_root_ca.cer > /opt/certs/russian_trusted_root_ca.crt
echo "" >> /opt/certs/russian_trusted_root_ca.crt
curl -k -s https://gu-st.ru/content/Other/doc/russian_trusted_sub_ca.cer >> /opt/certs/russian_trusted_root_ca.crt
chmod 644 /opt/certs/russian_trusted_root_ca.crtПроверка TLS внутри контейнера:
docker exec -it n8n node -e "require('https').get('https://gigachat.devices.sberbank.ru', (res) => console.log('TLS code:', res.statusCode)).on('error', console.error)"Репозиторий: n8n-gigachat-starter-kit
Что это значит для России
GigaChat API от Сбера работает на серверах в России, что позволяет обрабатывать персональные данные в соответствии с 152-ФЗ. Для self-hosted решений на Node.js требуется ручная установка корневых сертификатов Минцифры — это стандартная процедура для интеграции российских сервисов.
Вопросы и ответы
- Почему n8n не подключается к GigaChat API?
- Node.js не доверяет сертификатам Минцифры, так как использует корневые сертификаты NSS от Mozilla. Возникает ошибка UNABLE_TO_VERIFY_LEAF_SIGNATURE.
- Можно ли отключить проверку сертификатов?
- Технически можно через NODE_TLS_REJECT_UNAUTHORIZED=0, но это отключает проверку для всего процесса Node.js и открывает путь для MITM-атак.
- Как правильно добавить сертификаты Минцифры?
- Скачать корневой и промежуточный сертификаты с gu-st.ru, объединить в один файл, прокинуть в контейнер через volume и указать переменную NODE_EXTRA_CA_CERTS.


