Когда мы работаем с интеграциями в 1С (например, при интеграции с Google Таблицами) и пытаемся установить соединение с внешним API, например, через объект HTTPСоединение, иногда мы можем столкнуться с достаточно неприятной ошибкой: "Ошибка работы с интернет: Удаленный узел не прошел проверку.". Эта ошибка может возникнуть, даже если мы уверены в корректности логина, пароля и адреса сервиса. Давайте разберем, что означает эта ошибка, почему она возникает и как мы можем ее исправить, основываясь на нашем опыте и общих рекомендациях.
Данная ошибка чаще всего указывает на проблемы, связанные с SSL/TLS-сертификатами и их проверкой. Это означает, что 1С по какой-то причине не доверяет или не может проверить SSL-сертификат сервера, к которому мы пытаемся подключиться. Мы рассмотрим различные аспекты этой проблемы и предложим пошаговые решения.
Для начала, давайте вспомним, как мы обычно устанавливаем HTTP-соединение в 1С (используя встроенные механизмы или готовую подсистему PAPI). В зависимости от того, используем ли мы защищенное соединение (HTTPS) или незащищенное (HTTP), наш код будет немного отличаться. Ошибка "Удаленный узел не прошел проверку" напрямую связана с попыткой установить защищенное соединение (HTTPS).
Типичный пример кода для HTTP-соединения выглядит так:
HTTPСоединение = Новый HTTPСоединение(
"адрес_сервера.com", // Сервер
,, // Порт (если не указан, используется стандартный 80 для HTTP)
,, // Пользователь, Пароль (для базовой авторизации)
30 // Таймаут
);
Если же мы работаем с HTTPS, мы должны явно указать порт (обычно 443) и использовать объект ЗащищенноеСоединениеOpenSSL:
HTTPСоединение = Новый HTTPСоединение(
"адрес_сервера.com", // Сервер
443, // Порт HTTPS
,,, // Пользователь, Пароль, Прокси
30, // Таймаут
Новый ЗащищенноеСоединениеOpenSSL() // SSL-соединение
);
Мы видим, что в первом случае (HTTP) ЗащищенноеСоединениеOpenSSL() отсутствует, тогда как во втором (HTTPS) оно обязательно. Именно при использовании этого объекта и возникает наша проблема.
Одна из самых простых, но частых причин возникновения ошибки – это попытка использовать HTTPS там, где API ожидает обычный HTTP, или наоборот. Мы должны убедиться, что используем правильный протокол.
ЗащищенноеСоединениеOpenSSL(), мы получим ошибку проверки узла, потому что сервер не предоставит сертификат или предоставит его некорректно для HTTP-соединения.Новый ЗащищенноеСоединениеOpenSSL() из конструктора HTTPСоединение и, возможно, опустить порт, если он стандартный (80 для HTTP). Это позволит нам проверить, не является ли проблема именно в попытке установить защищенное соединение.
// Пример для HTTP-соединения без SSL
HTTPСоединение = Новый HTTPСоединение(
"http://адрес_сервиса.com", // Сервер (возможно, без явного порта)
80, // Порт HTTP, если не стандартный
,, // Пользователь, Пароль
,, // Прокси
30 // Таймаут
);
Ошибка "Удаленный узел не прошел проверку" в большинстве случаев означает, что 1С не доверяет SSL-сертификату внешнего ресурса, к которому мы пытаемся подключиться. Это может быть связано с несколькими факторами.
ЗащищенноеСоединениеOpenSSL():
Мы должны помнить, что конструктор Новый ЗащищенноеСоединениеOpenSSL() без параметров обычно достаточен для HTTPS, если сервер использует стандартные сертификаты, которым доверяет операционная система. Платформа 1С, начиная с версии 8.3.8, использует для проверки сертификатов те же механизмы и хранилища, что и Windows.
Иногда пользователи пытаются явно указать хранилище сертификатов Windows, например: Новый ЗащищенноеСоединениеOpenSSL(, Новый СертификатыУдостоверяющихЦентровWindows()). Однако, если проблема не в этом, то такая явная передача может быть излишней, а в некоторых случаях даже мешать, если мы не понимаем, что именно там происходит.
Чтобы понять, является ли проблема специфичной для 1С или же она кроется в окружении (операционной системе, сетевых настройках), мы должны проверить доступность и доверие к адресу сервера в обычном интернет-браузере. Рекомендуется использовать Internet Explorer или Microsoft Edge, если это ОС Windows, так как они чаще всего используют системные хранилища сертификатов.
Если браузер также сообщает о проблемах с сертификатом (например, "Недействительный сертификат", "Сертификат не выдан доверенным центром", "Срок действия сертификата истек"), то проблема не в 1С, а в настройках окружения. Мы должны сначала настроить "окружение" на компьютере/сервере, а затем повторить попытку из 1С.
Одной из наиболее частых причин ошибки является просроченный, отозванный или просто недействительный SSL-сертификат на стороне сервера, к которому мы пытаемся подключиться. Мы должны связаться с владельцем API, чтобы проверить статус их сертификата.
Иногда мы можем увидеть более конкретную ошибку, например: "Удаленный узел не прошел проверку: Не удалось выполнить проверку отзыва сертификата". Это означает, что 1С не может получить доступ к серверам OCSP (Online Certificate Status Protocol) или CRL (Certificate Revocation List), которые используются для проверки статуса отзыва сертификата.
Мы должны рассмотреть следующие моменты:
Для некоторых версий платформы 1С (начиная с 8.3.12) и при использовании продуктов типа Kerio Control, возможно, потребуется добавление в исключения межсетевого экрана адресов серверов проверки сертификатов (например, *.digicert.com или других, указанных в свойствах сертификата).
IgnoreServerCertificatesChainRevocationSoftFail=true в файл conf.cfg, расположенный в директории установки платформы 1С. Мы должны понимать, что это также временное и потенциально небезопасное решение.В некоторых случаях API может требовать не только серверный, но и клиентский сертификат для аутентификации. Или же корневой сертификат удостоверяющего центра API не является общеизвестным и не включен в стандартное хранилище Windows.
Если нам необходимо использовать специфические сертификаты удостоверяющих центров, которые не находятся в системном хранилище, мы можем загрузить их из файла:
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(, Новый СертификатыУдостоверяющихЦентровФайл("путь_к_файлу_сертификатов.pem"));
Или, если требуется клиентский сертификат с приватным ключом:
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл("путь_к_файлу_клиентского_сертификата.p12", "пароль"));
В случае клиентского сертификата с приватным ключом, часто требуется объединить файлы сертификата (например, .pem) и приватного ключа (.key) в один файл формата P12 с помощью утилиты OpenSSL, а затем передать его в Новый СертификатКлиентаФайл() с указанием пароля.
cacert.pem:
В некоторых ситуациях, особенно при работе со специфическими сервисами (например, 1С-Отчетность) или старыми версиями платформы, может потребоваться обновление или ручное добавление корневых сертификатов в файл cacert.pem. Этот файл расположен в директории установки платформы 1С (например, C:\Program Files (x86)\1cv8\8.3.Х.ХХХХ\bin\cacert.pem). Мы можем попробовать добавить туда корневые и промежуточные сертификаты, выданные для целевого API.
Мы не должны забывать о влиянии общих системных и сетевых настроек на успешность HTTP-соединения.
Неправильные дата и время на компьютере или сервере 1С могут привести к ошибкам при проверке срока действия сертификатов. Сертификат, срок действия которого еще не наступил или уже истек по часам системы, будет считаться недействительным. Мы рекомендуем настроить автоматическую синхронизацию времени.
Если в нашей сети используется прокси-сервер, его настройки могут блокировать доступ к целевому API или к серверам проверки сертификатов. Мы должны убедиться, что прокси-сервер настроен корректно и не препятствует доступу к необходимым ресурсам. Настройки прокси в 1С могут быть заданы через меню "Сервис" -> "Параметры" -> "Интернет-подключение". Мы также можем указать прокси непосредственно в конструкторе HTTPСоединение, если это требуется.
Прокси = Новый ИнтернетПрокси("адрес_прокси", 8080); // Пример
// Можно указать логин/пароль для прокси
// Прокси.Пользователь = "proxyuser";
// Прокси.Пароль = "proxypass";
HTTPСоединение = Новый HTTPСоединение(
"адрес_сервера.com",
443,
"Пользователь",
"Пароль",
Прокси, // Передаем объект прокси
30,
Новый ЗащищенноеСоединениеOpenSSL()
);
Брандмауэр на стороне клиента или сервера 1С может блокировать исходящие HTTPS-соединения на порт 443 (или другой, если используется нестандартный порт). Мы должны убедиться, что для процесса 1С:Предприятия (1cv8.exe или ragent.exe для сервера) или для используемых портов настроены соответствующие правила, разрешающие исходящие соединения.
В некоторых тестовых средах или как временное решение для быстрой проверки гипотез, мы можем полностью отключить проверку сертификата сервера. Однако мы настоятельно не рекомендуем делать это в продуктивных системах, так как это значительно снижает безопасность соединения.
Мы можем настроить HTTPСоединение так, чтобы оно не проверяло сертификат сервера, передавая Неопределено в качестве второго параметра в Новый ЗащищенноеСоединениеOpenSSL(). При этом первый параметр (клиентский сертификат) также должен быть Неопределено, если он не используется.
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено); // Отключение проверки серверного сертификата
HTTPСоединение = Новый HTTPСоединение(
"адрес_сервера.com",
443,
,,,
30,
ЗащищенноеСоединение
);
При запуске информационной базы 1С через тонкий клиент, в окне выбора баз мы можем выбрать "Изменить", затем "Дополнительно..." и установить признак "Не проверять сертификат сервера" в блоке "Выберите способ проверки сертификата сервера". Это может позволить войти в базу, но, как уже упоминалось, снижает безопасность.
Для предотвращения подобных проблем мы всегда рекомендуем использовать актуальные версии платформы 1С и операционной системы. Регулярное обновление корневых сертификатов Windows также является важной частью поддержания безопасного и надежного соединения.
Если мы столкнулись с ошибкой "Удаленный узел не прошел проверку", наш путь решения должен быть последовательным:
ЗащищенноеСоединениеOpenSSL().ЗащищенноеСоединениеOpenSSL(): Используем Новый ЗащищенноеСоединениеOpenSSL() без параметров.Таким образом, тщательно анализируя каждый из этих пунктов, мы сможем эффективно диагностировать и устранить ошибку "Удаленный узел не прошел проверку" при работе с HTTP-соединениями в 1С.