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

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

Работа с внешними системами через защищенные протоколы HTTPS — стандартная задача для современного разработчика 1С. Однако при попытке подключиться к веб-сервису мы часто сталкиваемся с системной ошибкой: «Ошибка работы с Интернет: Удаленный узел не прошел проверку». Это происходит потому, что платформа «1С:Предприятие» не может подтвердить подлинность сертификата сервера, к которому обращается. Давайте подробно разберем, как устроена проверка безопасности, и проанализируем все способы решения этой задачи — от программного обхода до глубокой настройки цепочек сертификатов.

Выясним причину: почему возникает ошибка проверки узла?

Когда 1С устанавливает соединение по протоколу HTTPS, происходит процесс, называемый SSL Handshake («рукопожатие»). Сервер присылает свой сертификат, а клиент (платформа 1С) должен проверить, подписан ли этот сертификат доверенным центром сертификации (CA). В платформу 1С встроен собственный список доверенных центров, который хранится в файле cacert.pem. Если сертификата вашего контрагента или его корневого центра в этом списке нет, 1С обрывает соединение из соображений безопасности. Проанализируем, как мы можем на это повлиять.

Способ 1: Программное использование защищенного соединения

Самый быстрый и зачастую наиболее эффективный способ — правильно инициализировать объект ЗащищенноеСоединениеOpenSSL. В последних релизах платформы 8.3 этот объект позволяет гибко управлять проверкой. Если мы передаем в конструктор параметры Неопределено, система пытается использовать стандартные настройки. Рассмотрим пример кода для создания WSПрокси:


// Создаем объект защищенного соединения
// Параметры (СертификатКлиента, СертификатыУдостоверяющихЦентров)
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);

// Используем его при создании определений или прокси
Попытка
    Определения = Новый WSОпределения(URL_WSDL, Логин, Пароль, , , ЗащищенноеСоединение);
    Прокси = Новый WSПрокси(Определения, URI_ПространстваИмен, ИмяСервиса, ИмяПорта, , , ЗащищенноеСоединение);
Исключение
    Сообщить("Ошибка инициализации: " + ОписаниеОшибки());
КонецПопытки;

Обратите внимание на важный нюанс: если ваша база работает в клиент-серверном варианте, этот код должен выполняться на стороне сервера. Именно сервер 1С будет выполнять сетевой запрос, а значит, и настройки безопасности должны быть актуальны для сервера.

Способ 2: Ручное редактирование файла cacert.pem

Если программный метод не помогает (например, при импорте WSDL непосредственно в конфигуратор), нам придется вручную добавить сертификат в список доверенных. Файл cacert.pem расположен в каталоге установленной платформы, обычно по пути: C:\Program Files\1cv8\номер_версии\bin\cacert.pem.

Рассмотрим по шагам, как правильно добавить сертификат:

  1. Откроем сайт веб-сервиса в браузере (например, Chrome или Яндекс).
  2. Нажмем на иконку «замочка» в адресной строке и перейдем в просмотр сертификата.
  3. На вкладке «Путь сертификации» мы увидим иерархию: Корневой сертификат -> Промежуточный -> Сертификат сайта. Важно: для стабильной работы нам нужно экспортировать всю цепочку.
  4. Сохраним каждый сертификат в формате Base64 (.cer).
  5. Откроем полученные файлы в текстовом редакторе (например, Блокнот). Мы увидим блок текста между -----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----.
  6. Скопируем этот текст и вставим его в самый конец файла cacert.pem.

Важный совет: При обновлении версии платформы 1С создается новая папка bin, и ваш модифицированный cacert.pem останется в старой папке. Не забудьте перенести изменения или настроить файл заново после обновления.

Способ 3: Использование клиентских сертификатов (.p12)

В некоторых случаях (например, при интеграции с государственными системами или банковскими шлюзами) сервер требует не только проверки своего сертификата, но и предъявления вашего личного сертификата. Обычно поставщик услуг выдает вам файл сертификата и закрытый ключ. Для 1С их лучше всего объединить в формат PKCS#12 (файл .p12).

Посмотрим, как подготовить такой файл с помощью утилиты OpenSSL:


openssl pkcs12 -export -in my_cert.crt -inkey private.key -out certificate_for_1c.p12

После этого в коде 1С мы указываем путь к этому файлу:


ПутьКФайлу = "C:\Certs\certificate_for_1c.p12";
Пароль = "ваш_пароль";
СертификатКлиента = Новый СертификатКлиентаФайл(ПутьКФайлу, Пароль);
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(СертификатКлиента, Неопределено);

Анализируем типичные ошибки при настройке

Если вы все сделали правильно, но ошибка «Удаленный узел не прошел проверку» сохраняется, проанализируем следующие моменты:

Дополнительные возможности: системное хранилище Windows

Начиная с современных версий 8.3.18+, мы можем попросить платформу обращаться напрямую к хранилищу сертификатов операционной системы. Это значительно упрощает жизнь системным администраторам, так как достаточно установить сертификат в Windows (в раздел «Доверенные корневые центры сертификации»), и 1С увидит его автоматически.

Для этого используем следующий объект:


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

Этот подход избавляет нас от необходимости редактировать текстовые файлы .pem и следить за их актуальностью при каждом обновлении платформы.

Подводя итог, можно сказать, что решение проблем с HTTPS в 1С требует понимания основ криптографии. Рекомендуем сначала попробовать программный способ с ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено), и только если это не помогает — переходить к импорту цепочек сертификатов в cacert.pem или системное хранилище ОС.

← На главную