Как исправить ошибку инициализации SSL-соединения при работе с HTTP-запросами в 1С?

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

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

Анализ программного кода и использование защищенного соединения

Первым шагом проанализируем, как в коде 1С инициализируется защищенное соединение. Платформа предоставляет объект ЗащищенноеСоединениеOpenSSL, который управляет параметрами TLS-рукопожатия. Рассмотрим стандартный пример инициализации, который часто приводит к ошибкам на серверной стороне:


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

// Вариант 2: Использование параметров по умолчанию
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);

HTTPСоединение = Новый HTTPСоединение(АдресСервера, , Логин, Пароль, , , ЗащищенноеСоединение);

Важно понимать разницу между этими вариантами. Для отладки подобных вызовов удобно использовать инструменты, аналогичные Postman. Использование СертификатКлиентаWindows заставляет систему искать клиентский сертификат в хранилище той учетной записи, под которой запущен процесс 1С. Если код выполняется в фоновом задании на сервере под системной учетной записью (например, usr1cv8), доступа к нужным сертификатам может не быть. В большинстве случаев для простого обращения к HTTPS-ресурсу достаточно использовать Неопределено в обоих параметрах конструктора.

Проверка портов и протоколов передачи данных

Довольно часто причина ошибки кроется в банальном несоответствии используемого порта типу соединения. Если вы используете ЗащищенноеСоединениеOpenSSL, убедитесь, что обращение идет на порт 443 (стандарт для HTTPS). Попытка инициировать SSL-рукопожатие на 80-м порту (HTTP) неизбежно приведет к ошибке инициализации, так как сервер не ожидает шифрованного трафика на этом порту.

Разберем ситуацию, когда проблема возникает только на одном сервере кластера (например, пользовательском). Проанализируем настройки брандмауэра и прокси-сервера. Если исходящий трафик по порту 443 заблокирован или перехватывается системой инспекции трафика (DPI), 1С не сможет завершить установку соединения, необходимого для работы API-сервисов.

Проблема версий протокола TLS и старых платформ 1С

Платформа 1С:Предприятие версии 8.3.6 и ниже имеет архитектурные ограничения в работе с современными протоколами безопасности. Современные веб-серверы требуют использования протокола TLS 1.2 или TLS 1.3. Версии платформы ниже 8.3.9 не имели полноценной встроенной поддержки TLS 1.2. Если целевой сервер отключил поддержку устаревших TLS 1.0 и TLS 1.1 из соображений безопасности, старая платформа 1С просто не сможет «договориться» с сервером.

Для решения этой проблемы рассмотрим следующие действия:

  1. Обновление платформы 1С до актуальной версии (не ниже 8.3.18).
  2. Если обновление невозможно, необходимо принудительно включить поддержку TLS 1.2 в операционной системе Windows через реестр (ветка HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols).

Обновление корневых сертификатов и файл cacert.pem

Начиная с марта 2022 года, многие российские веб-ресурсы перешли на использование сертификатов, выданных Национальным удостоверяющим центром (НУЦ) Минцифры. Если в операционной системе сервера 1С не установлены корневые сертификаты НУЦ, проверка цепочки доверия провалится. Эта проблема актуальна для любых интеграций.

Однако 1С использует библиотеку OpenSSL, которая может игнорировать системное хранилище Windows и обращаться к собственному файлу доверенных сертификатов — cacert.pem. Выясним, где он находится. Обычно это папка bin установленной платформы (например, C:\Program Files\1cv8\8.3.x.xxxx\bin\cacert.pem).

Чтобы решить проблему, выполним следующие шаги:

  1. Скачаем актуальный файл сертификатов с официального сайта curl.se.
  2. Заменим старый файл cacert.pem в каталоге 1С на новый (предварительно сделав бэкап).
  3. Добавим в конец этого файла текст корневого сертификата Минцифры в формате BASE64, если его там нет.

Влияние прав учетной записи службы 1С

Проанализируем ситуацию: на одном сервере кластера SSL работает, на другом — нет. Проверим, под какими учетными записями запущены службы «Агент сервера 1С:Предприятия». Если на проблемном сервере служба работает под ограниченной локальной учетной записью, у нее может не быть прав на чтение криптографических провайдеров в реестре Windows. Попробуйте временно запустить службу под учетной записью администратора для диагностики. Если ошибка исчезнет, значит, проблема в правах доступа к веткам реестра Cryptography.

Использование прокси-серверов и систем мониторинга

Иногда ошибка SSL является следствием работы сетевых экранов или антивирусного ПО (например, Kaspersky или Kerio), которые выполняют «подмену сертификата» для проверки зашифрованного трафика. В этом случае 1С видит сертификат, выданный антивирусом, а не целевым сайтом, и разрывает соединение как небезопасное. Рассмотрим решение: добавьте адрес целевого сервера в исключения проверки HTTPS в настройках вашего сетевого оборудования или антивируса.

Если в вашей организации используется прокси-сервер, убедитесь, что настройки в файле inetcfg.xml (находится в папке conf платформы) корректны. Ошибка инициализации SSL часто маскирует ошибку 407 (Proxy Authentication Required).

Заключение и обходные пути

Если все вышеперечисленные методы не помогают, а передача данных критически важна, можно рассмотреть временный «костыль» — переключение на протокол HTTP (без буквы S), если сервер назначения это позволяет. Это уберет слой шифрования и решит проблему с инициализацией SSL, но снизит безопасность передаваемых данных.


// Пример упрощенного создания соединения для диагностики
SSL = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
HTTPСоединение = Новый HTTPСоединение("example.com", 443, , , , 10, SSL);

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

← На главную