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

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

При интеграции «1С:Предприятия» с внешними веб-сервисами, API-интерфейсами (например, платежными шлюзами, CRM-системами или зарубежными сервисами вроде Zoho) разработчики часто сталкиваются с неприятной ошибкой: «Ошибка инициализации SSL-соединения». При этом диагностика усложняется тем, что на локальном компьютере разработчика код может работать корректно, а на рабочем сервере (например, в терминальной сессии RDP) — выдавать ошибку. Более того, при тестировании через обычный браузер сайт может открываться без проблем.

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

Выясняем первопричину: почему происходит сбой рукопожатия (SSL Handshake)?

Для того чтобы понять природу ошибки, проанализируем механизм установки защищенного соединения. Когда 1С пытается обратиться к ресурсу по протоколу HTTPS, происходит процедура согласования параметров шифрования (SSL/TLS Handshake). Стороны договариваются, по какому именно протоколу и с помощью каких алгоритмов (Cipher Suites) они будут шифровать трафик.

Основные причины сбоя на этом этапе:

  1. Несовместимость версий протоколов TLS: Веб-сервис требует высокий уровень безопасности (например, только TLS 1.2 или TLS 1.3), в то время как устаревшая версия платформы 1С умеет работать только с TLS 1.0 или SSL 3.0.
  2. Разница в сетевых стеках ПО на сервере: Браузер Google Chrome использует собственный криптографический стек (BoringSSL), поэтому он успешно открывает сайт. Браузер Internet Explorer и платформа 1С на старых версиях операционной системы полагаются на системную библиотеку Windows Schannel, в которой современные протоколы шифрования могут быть просто отключены по умолчанию.
  3. Отсутствие доверенных корневых сертификатов: Платформа 1С не может проверить цепочку сертификатов удаленного сервера из-за устаревшего локального хранилища сертификатов.

Давайте подробно рассмотрим каждый способ решения этой проблемы.

Решение 1. Обновление платформы «1С:Предприятие» (Рекомендуемый способ)

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

Если у вашего клиента или на вашем сервере установлена старая платформа (например, 8.3.6), обновление платформы хотя бы до актуального релиза ветки 8.3.8 (или выше) решит проблему автоматически, так как 1С научится корректно инициировать соединение по современным протоколам TLS 1.2 / 1.3.

Для выполнения программного подключения используйте правильную инициализацию защищенного соединения в коде 1С:


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

// Инициализируем HTTP-соединение с указанием защищенного соединения
HTTPСоединение = Новый HTTPСоединение("books.zoho.com", 443, , , , 30, ЗащищенноеСоединение);

Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");

АдресЗапроса = "api/v3/contacts?organization_id=333333&per_page=200&page=1";
HTTPЗапрос = Новый HTTPЗапрос(АдресЗапроса, Заголовки);

Попытка
    Ответ = HTTPСоединение.Получить(HTTPЗапрос);
    Сообщить("Соединение успешно установлено! Код ответа: " + Ответ.КодСостояния);
Исключение
    Сообщить("Ошибка при отправке запроса: " + ОписаниеОшибки());
КонецПопытки;

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

Решение 2. Настройка операционной системы Windows (Schannel и WinHTTP)

Бывают ситуации, когда обновить платформу 1С оперативно невозможно (например, из-за требований совместимости кастомных конфигураций), либо обмен с сайтом реализован через внешние COM-объекты Windows (например, WinHTTP.WinHTTPRequest.5.1 или MSXML2.ServerXMLHTTP).

В этом случае необходимо принудительно активировать поддержку TLS 1.2 на уровне операционной системы Windows Server через системный реестр.

Рассмотрим по шагам, как настроить операционную систему:

Шаг 1. Включение TLS 1.2 в Schannel

Откройте редактор реестра (команда regedit) и перейдите в ветку:

HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols

Если раздела TLS 1.2 не существует, создайте его. Внутри него создайте подраздел Client. Внутри подраздела Client добавьте два параметра типа DWORD (32 бита):

Шаг 2. Включение TLS 1.2 для WinHTTP

Для того чтобы системные библиотеки, через которые работает 1С и COM-объекты, использовали правильные протоколы, необходимо скорректировать настройки WinHTTP.

Перейдите в ветку реестра:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp

Создайте или измените параметр типа DWORD (32 бита) с именем DefaultSecureProtocols. Установите для него значение:

Важно: Если вы используете 32-разрядный клиент 1С на 64-разрядной операционной системе Windows, обязательно повторите эти же настройки в ветке WOW6432Node:

HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp

После внесения изменений в реестр обязательно перезагрузите сервер, чтобы настройки вступили в силу.

Решение 3. Обновление сертификатов безопасности (Файл cacert.pem)

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

Проанализируем эту ситуацию. В каталоге установки платформы (по умолчанию это путь вида C:\Program Files\1cv8\[ВерсияПлатформы]\bin\) находится файл cacert.pem. Этот файл содержит список доверенных удостоверяющих центров.

Если целевой сайт использует SSL-сертификат, выданный новым или специфическим удостоверяющим центром (например, Let's Encrypt или Минцифры РФ), которого нет в вашем старом файле cacert.pem, 1С заблокирует соединение.

Чтобы исправить это, выполните следующие действия:

  1. Откройте проблемный сайт в браузере и экспортируйте корневой сертификат сайта в формате Base64 (X.509, расширение .cer или .pem).
  2. Откройте экспортированный сертификат в текстовом редакторе (например, Блокноте), скопируйте его текстовое содержимое (весь блок от -----BEGIN CERTIFICATE----- до -----END CERTIFICATE-----).
  3. Откройте файл cacert.pem в папке bin вашей платформы 1С.
  4. Вставьте скопированный блок в самый конец файла cacert.pem и сохраните изменения. Для выполнения этой операции вам могут понадобиться права администратора.

Мы подробно разобрали все грани проблемы с инициализацией SSL-соединений. Понимание работы протоколов TLS и системного сетевого стека Windows позволит вам быстро локализовать проблему и выбрать оптимальный путь решения — будь то обновление платформы, тюнинг системного реестра или актуализация корневых сертификатов.

← На главную