При интеграции «1С:Предприятия» с внешними веб-сервисами, API-интерфейсами (например, платежными шлюзами, CRM-системами или зарубежными сервисами вроде Zoho) разработчики часто сталкиваются с неприятной ошибкой: «Ошибка инициализации SSL-соединения». При этом диагностика усложняется тем, что на локальном компьютере разработчика код может работать корректно, а на рабочем сервере (например, в терминальной сессии RDP) — выдавать ошибку. Более того, при тестировании через обычный браузер сайт может открываться без проблем.
В этой статье мы подробно разберем, почему возникает эта ошибка, как провести диагностику и какими способами можно решить проблему раз и навсегда.
Для того чтобы понять природу ошибки, проанализируем механизм установки защищенного соединения. Когда 1С пытается обратиться к ресурсу по протоколу HTTPS, происходит процедура согласования параметров шифрования (SSL/TLS Handshake). Стороны договариваются, по какому именно протоколу и с помощью каких алгоритмов (Cipher Suites) они будут шифровать трафик.
Основные причины сбоя на этом этапе:
Schannel, в которой современные протоколы шифрования могут быть просто отключены по умолчанию.Давайте подробно рассмотрим каждый способ решения этой проблемы.
Исторически в платформе 1С поддержка современных стандартов безопасности появлялась постепенно. Рассмотрим хронологию изменений:
books.zoho.com) требовал строгой безопасности класса A+ (только TLS 1.2), соединение сбрасывалось.Если у вашего клиента или на вашем сервере установлена старая платформа (например, 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С.
Бывают ситуации, когда обновить платформу 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
После внесения изменений в реестр обязательно перезагрузите сервер, чтобы настройки вступили в силу.
Даже если версии TLS согласованы, подключение может аварийно завершиться, если платформа 1С не доверяет сертификату веб-сервиса. 1С проверяет сертификаты с помощью локального файла корневых сертификатов.
Проанализируем эту ситуацию. В каталоге установки платформы (по умолчанию это путь вида C:\Program Files\1cv8\[ВерсияПлатформы]\bin\) находится файл cacert.pem. Этот файл содержит список доверенных удостоверяющих центров.
Если целевой сайт использует SSL-сертификат, выданный новым или специфическим удостоверяющим центром (например, Let's Encrypt или Минцифры РФ), которого нет в вашем старом файле cacert.pem, 1С заблокирует соединение.
Чтобы исправить это, выполните следующие действия:
-----BEGIN CERTIFICATE----- до -----END CERTIFICATE-----).bin вашей платформы 1С.cacert.pem и сохраните изменения. Для выполнения этой операции вам могут понадобиться права администратора.Мы подробно разобрали все грани проблемы с инициализацией SSL-соединений. Понимание работы протоколов TLS и системного сетевого стека Windows позволит вам быстро локализовать проблему и выбрать оптимальный путь решения — будь то обновление платформы, тюнинг системного реестра или актуализация корневых сертификатов.