Как исправить ошибку «Удаленный узел не прошел проверку» при подключении к HTTPS сервисам в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При интеграции 1С со сторонними веб-сервисами (API мессенджеров, интернет-магазины, государственные порталы) мы часто сталкиваемся с необходимостью работы через защищенный протокол HTTPS. Казалось бы, задача тривиальная, однако нередко возникает ситуация: в браузере на сервере ссылка открывается, сертификат выглядит валидным (зеленый замочек), а при попытке программного подключения из 1С возникает ошибка «Удаленный узел не прошел проверку».

В этой статье мы подробно разберем, почему возникает эта ошибка, рассмотрим быстрый (но небезопасный) способ её устранения, а также проанализируем правильный метод настройки защищенного соединения, исключающий уязвимости.

Суть проблемы и диагностики

Рассмотрим типичный сценарий. Мы пытаемся подключиться к внешнему ресурсу, используя объект HTTPСоединение. Для работы по HTTPS нам необходимо передать параметры защищенного соединения. Часто разработчики используют стандартный код, полагаясь на системные хранилища сертификатов Windows:


SSL = Новый ЗащищенноеСоединениеOpenSSL(
    Новый СертификатКлиентаWindows(),
    Новый СертификатыУдостоверяющихЦентровWindows()
);

HTTPСоединение = Новый HTTPСоединение(
    АдресСервера,
    , , , , 20, SSL
);

И именно в этот момент платформа выдает исключение о том, что проверка узла не пройдена. При этом системный администратор утверждает, что сертификаты установлены, и демонстрирует успешное открытие адреса в Chrome или Edge на том же сервере.

Давайте разберемся, как это исправить.

Способ 1: Быстрое решение (Отключение проверки сертификата)

Если нам нужно срочно запустить интеграцию или мы находимся в контуре разработки, где безопасность канала не является критическим фактором, мы можем отключить проверку валидности SSL-сертификата со стороны 1С.

Для этого изменим инициализацию объекта ЗащищенноеСоединениеOpenSSL. Если в конструктор не передавать параметры, платформа по умолчанию не будет сверять сертификат сервера с доверенными центрами сертификации.

Рассмотрим измененный код:


// Создаем защищенное соединение БЕЗ проверки сертификатов
SSL = Новый ЗащищенноеСоединениеOpenSSL(); 

HTTPСоединение = Новый HTTPСоединение(
    НастройкиСервиса["Сервер"] + НастройкиСервиса["Сервис"],
    , , , , 20, SSL
);

Почему это работает?
В этом случае 1С устанавливает шифрованный канал связи, но не проверяет, действительно ли сервер на том конце является тем, за кого себя выдает. Ошибка проверки узла исчезает, так как сама проверка не выполняется.

В чем опасность?
Используя этот метод в рабочей среде (Production), мы подвергаем систему риску атаки "Человек посередине" (MitM — Man in the Middle). Злоумышленник может перехватить трафик, подставив свой сертификат, и 1С "молча" согласится передать данные. Поэтому данный метод рекомендуется использовать только для отладки или внутри защищенного периметра сети.

Способ 2: Правильное решение (Настройка сертификатов в Windows)

Если мы хотим оставить проверку валидности (что настоятельно рекомендуется), нам нужно понять, почему код из первого примера не работал. Основных причин две:

  1. Контекст пользователя. Обычно мы проверяем работу в браузере под своей учетной записью (или учетной записью администратора), а сервер 1С запускается под служебной учетной записью (например, USR1CV8). Сертификаты, установленные в хранилище "Личное" или "Текущий пользователь", недоступны службе сервера 1С.
  2. Неполная цепочка доверия. Сервер может отдавать только свой конечный сертификат, но в системе отсутствует промежуточный (Intermediate) или корневой (Root) сертификат удостоверяющего центра.

Чтобы метод Новый СертификатыУдостоверяющихЦентровWindows() отработал корректно, выполним следующие шаги:

Шаг 1. Экспорт сертификата
Откроем сайт сервиса в браузере, нажмем на замочек в адресной строке и экспортируем сертификат в файл (обычно формат .cer или .crt). Желательно выгрузить всю цепочку сертификации (путь сертификации).

Шаг 2. Установка в правильное хранилище
Устанавливать сертификат нужно не просто двойным кликом (который часто ставит его в профиль текущего пользователя), а через консоль управления сертификатами (mmc).

  1. Запустим консоль управления сертификатами для Локального компьютера (Local Machine). Это критически важно, так как служба 1С должна иметь к нему доступ.
  2. Перейдем в раздел Доверенные корневые центры сертификации (Trusted Root Certification Authorities).
  3. Импортируем туда полученный корневой сертификат.
  4. Если есть промежуточные сертификаты, добавим их в раздел Промежуточные центры сертификации.

После этих действий код с использованием СертификатыУдостоверяющихЦентровWindows() должен начать работать, так как служба сервера 1С увидит доверенный сертификат в общем хранилище машины.

Способ 3: Универсальное решение (Файл cacert.pem)

Существует еще один, наиболее надежный и кроссплатформенный способ (особенно актуально для серверов на Linux, где нет хранилища Windows). Платформа 1С использует собственное хранилище сертификатов, расположенное в файле cacert.pem.

Давайте разберем алгоритм действий:

  1. Найдем файл cacert.pem в каталоге установки платформы 1С (папка bin).
  2. Выгрузим сертификат целевого сайта в формате Base-64 encoded X.509.
  3. Откроем файл сертификата любым текстовым редактором (Блокнот, Notepad++). Мы увидим текст, начинающийся с -----BEGIN CERTIFICATE----- и заканчивающийся -----END CERTIFICATE-----.
  4. Скопируем этот блок текста целиком.
  5. Откроем файл cacert.pem и вставим скопированный блок в самый конец файла.
  6. Сохраним изменения.

После этой процедуры платформе даже не обязательно указывать параметры сертификации — она автоматически подхватит обновленный список доверенных узлов из своего конфигурационного файла. Либо можно явно указать путь к файлу сертификата при создании соединения:


// Если мы сохранили нужный сертификат в отдельный файл
ПутьКСертификату = "C:\Certs\vk_teams.pem";
SSL = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Новый СертификатыУдостоверяющихЦентровФайл(ПутьКСертификату));

Заключение

Мы выяснили, что ошибка проверки узла возникает из-за отсутствия доверия между клиентом 1С и сервером. Для быстрой отладки можно использовать конструктор ЗащищенноеСоединениеOpenSSL без параметров, но для продуктивной среды обязательно обеспечьте наличие сертификатов в хранилище локального компьютера или в файле cacert.pem. Это гарантирует безопасность передаваемых данных и защитит вашу систему от перехвата информации.

← На главную