Как подружить Claude и n8n в Docker без проблем с сертификатами
Если вы подключаете российские сервисы к self-hosted n8n в Docker, можно быстро упереться в ошибку SSL и потерять время на отладку. В материале разбираем, как безопасно добавить корневые сертификаты Минцифры и не отключать проверку TLS целиком.
Почему n8n в Docker ругается на SSL
Проблема возникает, когда self-hosted n8n или любое другое Node.js-приложение в контейнере пытается достучаться до API российского сервиса. В источнике разбирается связка с GigaChat, но сама ошибка типична для любых подобных интеграций: контейнер падает с сообщением, что не удалось проверить первый сертификат.
Причина в цепочке доверия. Сертификаты для доменов Сбера подписаны головным удостоверяющим центром Минцифры России, а Node.js по умолчанию ориентируется на набор корневых сертификатов Mozilla. Поэтому российский корневой центр для него просто не знаком, и TLS-соединение обрывается еще на этапе проверки.
Почему не стоит просто отключать проверку сертификатов
Самый простой, но плохой вариант — поставить NODE_TLS_REJECT_UNAUTHORIZED=0 и забыть про ошибку. На тестах такой ход может показаться удобным, но на боевом сервере он превращается в риск для всех запросов из контейнера.
Когда проверка TLS отключена глобально, n8n перестает нормально верифицировать не только API-модели, но и обращения к базам данных, вебхукам и другим внешним сервисам. Если трафик будет перехвачен, злоумышленник сможет получить токены и другие чувствительные данные.
Как добавить сертификаты Минцифры в Docker
Вместо отключения защиты нужно добавить корневой сертификат в контейнер и указать Node.js использовать его дополнительно. В статье для этого скачивают корневой и промежуточный сертификаты Минцифры на сервер, кладут их в каталог и делают файл доступным для контейнера через volume.
Дальше в docker-compose задают переменную NODE_EXTRA_CA_CERTS и перезапускают стек. Проверять это лучше не через openssl s_client, потому что он берет сертификаты из системного хранилища, а через команду внутри контейнера с Node.js. Если запрос к нужному домену возвращает ответ 200 или 403, значит цепочка доверия подхватилась правильно.
Что еще важно знать при работе с n8n и российскими API
В материале отдельно отмечена еще одна практическая ловушка n8n 1.x: прямой доступ к переменным окружения из выражений ноды там заблокирован. Если пытаться брать токен через $env.GIGACHAT_TOKEN, можно увидеть ошибку доступа к env vars.
Чтобы не городить обходные пути, автор советует хранить ключи через Credentials и Header Auth. А еще есть история про ошибку в промпте: модель начала подставлять имя «Иван» в пустые поля, потому что не умела возвращать null. Это хороший пример того, как важно проверять выход ИИ и добавлять валидацию перед передачей данных дальше.