Почему возникает "Ошибка инициализации SSL-соединения" при работе с API из 1С и как это исправить?

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

Часто при разработке интеграций с внешними сервисами, такими как API маркетплейсов (Wildberries, Ozon), можно столкнуться с ситуацией, когда код, который исправно работал, внезапно перестает функционировать. Первой мыслью обычно бывает проверка изменений в самом API, но, как показывает практика, причина может быть глубже — на уровне системных настроек сервера, где исполняется код 1С. Проанализируем типичный случай, когда при попытке выполнить HTTP-запрос программа выдает ошибку "Ошибка инициализации SSL-соединения", и разберем, как ее диагностировать и устранить.

Анализ исходной ситуации

Рассмотрим сценарий: программист использует стандартный метод для получения данных с Wildberries. Код работал в конце 2024 года, но в начале 2025-го перестал, вызывая исключение. Важнейшей деталью является то, что одновременно с этим перестали работать интеграции и с другими крупными площадками — Ozon и Яндекс. Более того, даже встроенные интернет-сервисы платформы 1С, например "Интернет-поддержка пользователей", выдают аналогичную ошибку "SSL connect error". Аналогичные сложности могут возникнуть и в более специфических задачах, например, когда требуется получение токена авторизации RuStore с использованием сложных алгоритмов подписи.

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

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


ssl = Новый ЗащищенноеСоединениеOpenSSL;
// В реальном коде хост будет другим, например, suppliers-api.wildberries.ru
Хост = "api.lemanapro.ru"; 
HTTPСоединение = Новый HTTPСоединение(Хост, , , , , , ssl);

HTTPЗапрос = Новый HTTPЗапрос("/некий/метод/api");
HTTPЗапрос.Заголовки["Authorization"] = "Bearer ...";

// Попытка выполнить запрос
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);

При выполнении последней строки система возвращает ошибку:

{ВнешняяОбработка...}: Ошибка при вызове метода контекста (Получить) по причине: Ошибка работы с Интернет: Ошибка инициализации SSL-соединения

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

Причина 1: Отсутствие в системе российских корневых сертификатов

Это наиболее вероятная причина в современных реалиях. Многие российские веб-сервисы, включая государственные порталы и крупные коммерческие площадки, перешли на использование SSL-сертификатов, выданных Национальным удостоверяющим центром Минцифры РФ. Для того чтобы операционная система доверяла таким сертификатам и могла успешно установить защищенное (SSL/TLS) соединение, в ее хранилище должны быть установлены корневые сертификаты этого УЦ. В ряде инфраструктурных решений также применяется публикация HTTP-сервисов с использованием клиентских SSL-сертификатов, что требует особого внимания к настройке доверия.

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

Что делать?

Необходимо передать задачу системному администратору. Он должен выполнить следующие шаги:

  1. Перейти на официальный портал Госуслуг в раздел для скачивания корневых сертификатов.
  2. Скачать корневой и выпускающий сертификаты (обычно это файлы с расширением .cer).
  3. Установить их в системное хранилище на сервере. Важно устанавливать их в хранилище "Локальный компьютер", а не "Текущий пользователь", чтобы они были доступны для системных служб, под которыми может работать сервер 1С.
    • Корневой сертификат (Russian Trusted Root CA) помещается в хранилище "Доверенные корневые центры сертификации".
    • Выпускающий сертификат (Russian Trusted Sub CA) помещается в хранилище "Промежуточные центры сертификации".
  4. После установки сертификатов рекомендуется перезапустить сервер 1С или весь сервер целиком для надежности.

После этой процедуры система научится "доверять" сайтам с российскими сертификатами, и SSL-соединение будет устанавливаться корректно.

Причина 2: Использование устаревших протоколов шифрования (TLS)

В целях безопасности веб-серверы по всему миру отказываются от поддержки старых и уязвимых протоколов шифрования, таких как SSLv3, TLS 1.0 и TLS 1.1. Современным стандартом является TLS 1.2 и выше. Платформа 1С версии 8.3.18 и новее поддерживает TLS 1.2, но его использование может быть принудительно отключено в настройках самой операционной системы Windows Server. Общие принципы того, как работает криптография в 1С, полезно знать каждому разработчику для понимания механизмов защиты данных.

Если на сервере отключена поддержка TLS 1.2 в качестве клиентского протокола, то 1С просто не сможет договориться с сервером API об общем протоколе шифрования, что также приведет к ошибке инициализации SSL-соединения.

Что делать?

Системный администратор должен проверить и, при необходимости, включить поддержку TLS 1.2 через реестр Windows:

  1. Открыть редактор реестра (regedit).
  2. Перейти к ветке: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\
  3. Убедиться, что в этой ветке существует раздел TLS 1.2, а внутри него — подраздел Client.
  4. Внутри раздела Client должны быть созданы два параметра типа DWORD (32-бит):
    • DisabledByDefault со значением 0.
    • Enabled со значением 1.
  5. После внесения изменений в реестр обязательна перезагрузка сервера.

Эти настройки гарантируют, что системные компоненты, которые 1С использует для HTTP-соединений, смогут инициировать соединение по протоколу TLS 1.2.

Причина 3: Блокировка сетевых соединений брандмауэром

Хотя эта причина менее вероятна, если раньше все работало, ее нельзя исключать. Корпоративный брандмауэр или файрвол на самом сервере может блокировать исходящие запросы на порт 443 (стандартный порт для HTTPS) к определенным IP-адресам или доменным именам.

Что делать?

Системный администратор должен проверить:

Совет по отладке: Не скрывайте ошибки!

Напоследок, важный совет по написанию кода. В первоначальном сообщении на форуме автор использовал конструкцию Попытка-Исключение, которая "проглатывала" ошибку.


Попытка
    HTTPОтвет =  HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
Исключение
    // Ошибка скрыта, описание не выводится
    Возврат;
КонецПопытки;

Это крайне плохая практика на этапе разработки и отладки. Из-за этого автор долго не мог понять, в чем дело, так как не видел текста ошибки. Только убрав эту конструкцию, он получил ценную информацию — "Ошибка инициализации SSL-соединения".

Правильный подход при отладке — всегда выводить описание ошибки:


Попытка
    HTTPОтвет =  HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
Исключение
    // Выводим информацию об ошибке в журнал или пользователю
    Сообщить("Произошла ошибка при выполнении HTTP-запроса!");
    Сообщить(ОписаниеОшибки());
    Возврат; // или ВызватьИсключение
КонецПопытки;

Функция ОписаниеОшибки() — ваш лучший помощник в поиске причин неисправностей. Не пренебрегайте ею.

← На главную