В процессе интеграции 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-сервисов.
Платформа 1С:Предприятие версии 8.3.6 и ниже имеет архитектурные ограничения в работе с современными протоколами безопасности. Современные веб-серверы требуют использования протокола TLS 1.2 или TLS 1.3. Версии платформы ниже 8.3.9 не имели полноценной встроенной поддержки TLS 1.2. Если целевой сервер отключил поддержку устаревших TLS 1.0 и TLS 1.1 из соображений безопасности, старая платформа 1С просто не сможет «договориться» с сервером.
Для решения этой проблемы рассмотрим следующие действия:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols).Начиная с марта 2022 года, многие российские веб-ресурсы перешли на использование сертификатов, выданных Национальным удостоверяющим центром (НУЦ) Минцифры. Если в операционной системе сервера 1С не установлены корневые сертификаты НУЦ, проверка цепочки доверия провалится. Эта проблема актуальна для любых интеграций.
Однако 1С использует библиотеку OpenSSL, которая может игнорировать системное хранилище Windows и обращаться к собственному файлу доверенных сертификатов — cacert.pem. Выясним, где он находится. Обычно это папка bin установленной платформы (например, C:\Program Files\1cv8\8.3.x.xxxx\bin\cacert.pem).
Чтобы решить проблему, выполним следующие шаги:
cacert.pem в каталоге 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-сервисов позволяют избежать большинства проблем с защищенной передачей данных.