Как исправить ошибку "Удаленный узел не прошел проверку" при HTTP-соединении с API в 1С?

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

Когда мы работаем с интеграциями в 1С (например, при интеграции с Google Таблицами) и пытаемся установить соединение с внешним API, например, через объект HTTPСоединение, иногда мы можем столкнуться с достаточно неприятной ошибкой: "Ошибка работы с интернет: Удаленный узел не прошел проверку.". Эта ошибка может возникнуть, даже если мы уверены в корректности логина, пароля и адреса сервиса. Давайте разберем, что означает эта ошибка, почему она возникает и как мы можем ее исправить, основываясь на нашем опыте и общих рекомендациях.

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

Основы HTTP-соединения и защищенного соединения в 1С

Для начала, давайте вспомним, как мы обычно устанавливаем 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) оно обязательно. Именно при использовании этого объекта и возникает наша проблема.

Причина 1: Неправильный тип протокола (HTTP вместо HTTPS или наоборот)

Одна из самых простых, но частых причин возникновения ошибки – это попытка использовать HTTPS там, где API ожидает обычный HTTP, или наоборот. Мы должны убедиться, что используем правильный протокол.

  1. Проверка протокола: Первым делом, мы должны точно выяснить, какой протокол используется целевым API. Если API работает по HTTP, а мы пытаемся подключиться через HTTPS с ЗащищенноеСоединениеOpenSSL(), мы получим ошибку проверки узла, потому что сервер не предоставит сертификат или предоставит его некорректно для HTTP-соединения.
  2. Попробуем без защищенного соединения: Если мы не уверены, что API использует HTTPS, попробуем совсем убрать Новый ЗащищенноеСоединениеOpenSSL() из конструктора HTTPСоединение и, возможно, опустить порт, если он стандартный (80 для HTTP). Это позволит нам проверить, не является ли проблема именно в попытке установить защищенное соединение.
  3. 
    // Пример для HTTP-соединения без SSL
    HTTPСоединение = Новый HTTPСоединение(
        "http://адрес_сервиса.com", // Сервер (возможно, без явного порта)
        80, // Порт HTTP, если не стандартный
        ,, // Пользователь, Пароль
        ,, // Прокси
        30 // Таймаут
    );
    

Причина 2: Проблемы с SSL/TLS-сертификатами и доверием к ним

Ошибка "Удаленный узел не прошел проверку" в большинстве случаев означает, что 1С не доверяет SSL-сертификату внешнего ресурса, к которому мы пытаемся подключиться. Это может быть связано с несколькими факторами.

  1. Стандартное использование ЗащищенноеСоединениеOpenSSL():

    Мы должны помнить, что конструктор Новый ЗащищенноеСоединениеOpenSSL() без параметров обычно достаточен для HTTPS, если сервер использует стандартные сертификаты, которым доверяет операционная система. Платформа 1С, начиная с версии 8.3.8, использует для проверки сертификатов те же механизмы и хранилища, что и Windows.

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

  2. Диагностика через браузер:

    Чтобы понять, является ли проблема специфичной для 1С или же она кроется в окружении (операционной системе, сетевых настройках), мы должны проверить доступность и доверие к адресу сервера в обычном интернет-браузере. Рекомендуется использовать Internet Explorer или Microsoft Edge, если это ОС Windows, так как они чаще всего используют системные хранилища сертификатов.

    • Если 1С работает в файловом режиме, проверку нужно делать на том же компьютере, где запущена 1С.
    • В клиент-серверном режиме проверку необходимо выполнять на сервере 1С:Предприятия, где запущена служба "Агент сервера 1С:Предприятия". Мы должны убедиться, что служба агента 1С запускается от имени пользователя, у которого есть необходимые сетевые разрешения и которому доступны нужные сертификаты в хранилище.

    Если браузер также сообщает о проблемах с сертификатом (например, "Недействительный сертификат", "Сертификат не выдан доверенным центром", "Срок действия сертификата истек"), то проблема не в 1С, а в настройках окружения. Мы должны сначала настроить "окружение" на компьютере/сервере, а затем повторить попытку из 1С.

  3. Просроченные или недействительные сертификаты:

    Одной из наиболее частых причин ошибки является просроченный, отозванный или просто недействительный SSL-сертификат на стороне сервера, к которому мы пытаемся подключиться. Мы должны связаться с владельцем API, чтобы проверить статус их сертификата.

Причина 3: Проблемы с отзывом сертификатов (CRL/OCSP)

Иногда мы можем увидеть более конкретную ошибку, например: "Удаленный узел не прошел проверку: Не удалось выполнить проверку отзыва сертификата". Это означает, что 1С не может получить доступ к серверам OCSP (Online Certificate Status Protocol) или CRL (Certificate Revocation List), которые используются для проверки статуса отзыва сертификата.

Мы должны рассмотреть следующие моменты:

  1. Блокировка доступа: Доступ к серверам OCSP/CRL может быть заблокирован настройками сети, прокси-сервера, межсетевого экрана (файрвола) или антивирусного программного обеспечения. Мы должны проверить сетевые логи и настройки безопасности.

    Для некоторых версий платформы 1С (начиная с 8.3.12) и при использовании продуктов типа Kerio Control, возможно, потребуется добавление в исключения межсетевого экрана адресов серверов проверки сертификатов (например, *.digicert.com или других, указанных в свойствах сертификата).

  2. Временные решения (не рекомендуется для постоянного использования):
    • Мы можем временно отключить проверку отзыва сертификатов в настройках Windows (через "Свойства обозревателя" -> вкладка "Дополнительно" -> снять флажок "Проверять отзыв сертификатов издателя"). Однако это снижает безопасность и не является постоянным решением.
    • Для игнорирования ошибок проверки сертификата в определенных случаях (например, при проблемах с мягкой проверкой цепочки отзыва) существует возможность добавления строки IgnoreServerCertificatesChainRevocationSoftFail=true в файл conf.cfg, расположенный в директории установки платформы 1С. Мы должны понимать, что это также временное и потенциально небезопасное решение.

Причина 4: Использование специфических или клиентских сертификатов

В некоторых случаях API может требовать не только серверный, но и клиентский сертификат для аутентификации. Или же корневой сертификат удостоверяющего центра API не является общеизвестным и не включен в стандартное хранилище Windows.

  1. Загрузка сертификатов из файла:

    Если нам необходимо использовать специфические сертификаты удостоверяющих центров, которые не находятся в системном хранилище, мы можем загрузить их из файла:

    
    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(, Новый СертификатыУдостоверяющихЦентровФайл("путь_к_файлу_сертификатов.pem"));
    

    Или, если требуется клиентский сертификат с приватным ключом:

    
    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл("путь_к_файлу_клиентского_сертификата.p12", "пароль"));
    

    В случае клиентского сертификата с приватным ключом, часто требуется объединить файлы сертификата (например, .pem) и приватного ключа (.key) в один файл формата P12 с помощью утилиты OpenSSL, а затем передать его в Новый СертификатКлиентаФайл() с указанием пароля.

  2. Обновление cacert.pem:

    В некоторых ситуациях, особенно при работе со специфическими сервисами (например, 1С-Отчетность) или старыми версиями платформы, может потребоваться обновление или ручное добавление корневых сертификатов в файл cacert.pem. Этот файл расположен в директории установки платформы 1С (например, C:\Program Files (x86)\1cv8\8.3.Х.ХХХХ\bin\cacert.pem). Мы можем попробовать добавить туда корневые и промежуточные сертификаты, выданные для целевого API.

Причина 5: Системные и сетевые настройки

Мы не должны забывать о влиянии общих системных и сетевых настроек на успешность HTTP-соединения.

  1. Дата и время:

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

  2. Прокси-сервер:

    Если в нашей сети используется прокси-сервер, его настройки могут блокировать доступ к целевому API или к серверам проверки сертификатов. Мы должны убедиться, что прокси-сервер настроен корректно и не препятствует доступу к необходимым ресурсам. Настройки прокси в 1С могут быть заданы через меню "Сервис" -> "Параметры" -> "Интернет-подключение". Мы также можем указать прокси непосредственно в конструкторе HTTPСоединение, если это требуется.

    
    Прокси = Новый ИнтернетПрокси("адрес_прокси", 8080); // Пример
    // Можно указать логин/пароль для прокси
    // Прокси.Пользователь = "proxyuser";
    // Прокси.Пароль = "proxypass";
    
    HTTPСоединение = Новый HTTPСоединение(
        "адрес_сервера.com",
        443,
        "Пользователь",
        "Пароль",
        Прокси, // Передаем объект прокси
        30,
        Новый ЗащищенноеСоединениеOpenSSL()
    );
    
  3. Брандмауэр (Firewall):

    Брандмауэр на стороне клиента или сервера 1С может блокировать исходящие HTTPS-соединения на порт 443 (или другой, если используется нестандартный порт). Мы должны убедиться, что для процесса 1С:Предприятия (1cv8.exe или ragent.exe для сервера) или для используемых портов настроены соответствующие правила, разрешающие исходящие соединения.

Причина 6: Отключение проверки сертификатов (Крайне не рекомендуется для постоянного использования)

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

  1. Программно:

    Мы можем настроить HTTPСоединение так, чтобы оно не проверяло сертификат сервера, передавая Неопределено в качестве второго параметра в Новый ЗащищенноеСоединениеOpenSSL(). При этом первый параметр (клиентский сертификат) также должен быть Неопределено, если он не используется.

    
    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено); // Отключение проверки серверного сертификата
    HTTPСоединение = Новый HTTPСоединение(
        "адрес_сервера.com",
        443,
        ,,,
        30,
        ЗащищенноеСоединение
    );
    
  2. Через тонкий клиент:

    При запуске информационной базы 1С через тонкий клиент, в окне выбора баз мы можем выбрать "Изменить", затем "Дополнительно..." и установить признак "Не проверять сертификат сервера" в блоке "Выберите способ проверки сертификата сервера". Это может позволить войти в базу, но, как уже упоминалось, снижает безопасность.

Заключительные рекомендации

Для предотвращения подобных проблем мы всегда рекомендуем использовать актуальные версии платформы 1С и операционной системы. Регулярное обновление корневых сертификатов Windows также является важной частью поддержания безопасного и надежного соединения.

Если мы столкнулись с ошибкой "Удаленный узел не прошел проверку", наш путь решения должен быть последовательным:

  1. Проверим протокол: Убедимся, что API действительно работает по HTTPS, а не по HTTP. Если HTTP, уберем ЗащищенноеСоединениеOpenSSL().
  2. Упростим ЗащищенноеСоединениеOpenSSL(): Используем Новый ЗащищенноеСоединениеOpenSSL() без параметров.
  3. Проверим в браузере: Убедимся, что доступ к URL API через браузер на том же компьютере/сервере проходит без предупреждений о сертификатах.
  4. Проверим системные настройки: Дату/время, брандмауэр, прокси-сервер.
  5. Свяжемся с поставщиком API: Если все вышеперечисленное не помогло, возможно, проблема на стороне API (просроченный, некорректно настроенный сертификат).

Таким образом, тщательно анализируя каждый из этих пунктов, мы сможем эффективно диагностировать и устранить ошибку "Удаленный узел не прошел проверку" при работе с HTTP-соединениями в 1С.

← На главную