При попытке установить защищенное соединение с веб-сервисом 1С, опубликованным на веб-сервере IIS, часто возникает ошибка "Ошибка инициализации SSL-соединения". Эта проблема особенно актуальна при использовании самоподписанных сертификатов и интеграции конфигураций, таких как 1С:Документооборот и 1С:Бухгалтерия Предприятия. Давайте подробно рассмотрим причины возникновения этой ошибки и предложим комплексные решения.
Предположим, у нас есть система, где 1С:Документооборот и 1С:Бухгалтерия Предприятия (БП) работают на платформе 8.3.21.1622. Веб-сервер IIS настроен, веб-сервисы интеграции опубликованы и доступны через браузер. Однако при попытке программного подключения к веб-сервису из 1С с использованием следующего кода:
Определения = Новый WSОпределения(МестоположениеWSDL + "ws/dm.1cws?wsdl", ИмяПользователя, Пароль, ИнтернетПрокси, Таймаут, ЗащищенноеСоединение, ПоддерживаетсяАутентификацияОС И ИспользуетсяАутентификацияОС);
Мы получаем ошибку: "При вызове веб-сервиса произошла ошибка. При создании описания сервиса произошла ошибка. URL сервиса: по причине: Ошибка работы с Интернет: Ошибка инициализации SSL-соединения Ошибка при вызове конструктора (WSОпределения)". Давайте разберем по шагам, что могло пойти не так и как это исправить.
Если вы используете самоподписанный сертификат, как в нашем случае, необходимо убедиться в нескольких ключевых аспектах его настройки и работы:
МестоположениеWSDL) точно соответствует имени, указанному в поле "Выдан кому" вашего SSL-сертификата. Если в сертификате указано my-server.local, а вы обращаетесь по 192.168.1.100 или my-server, возникнет ошибка проверки имени хоста, которая приводит к сбою SSL-соединения. Для самоподписанных сертификатов это критично, так как они не проходят внешнюю проверку.https указан правильный IP-адрес, порт и выбран ваш SSL-сертификат.Для быстрой диагностики можно попробовать открыть URL веб-сервиса (например, https://your_server/ws/dm.1cws?wsdl) в браузере. В браузере (например, Chrome, Firefox) посмотрите детали соединения (обычно нажав на значок замка в адресной строке). Нас интересуют следующие параметры:
Это позволит подтвердить, что IIS корректно отдает сертификат и устанавливает защищенное соединение на стороне сервера.
Одной из наиболее частых причин ошибки инициализации SSL-соединения при использовании самоподписанных сертификатов является отсутствие доверия к ним со стороны операционной системы, на которой выполняется клиентский код 1С. Важно понимать, что установка сертификата на IIS не означает его автоматическое доверие на других машинах или даже на том же сервере, но для других пользователей/служб.
Local System или Сетевая служба).Если используется кластер серверов 1С, сертификат необходимо установить на каждом рабочем сервере кластера.
certlm.msc для компьютера или certmgr.msc для текущего пользователя)..cer или .crt) и выбрав хранилище "Доверенные корневые центры сертификации".Даже если вы уверены, что сертификат добавлен, перепроверьте, что добавлен именно корневой сертификат (если ваш самоподписанный сертификат является конечным в цепочке) или сам самоподписанный сертификат. Ошибки здесь могут быть незаметными.
Хотя ваш браузер может показывать, что IIS использует TLS 1.2, это не всегда означает, что клиент 1С сможет успешно установить соединение. Важно проверить, что набор шифров (Cipher Suites) и протоколы TLS/SSL, поддерживаемые IIS, совместимы с тем, что ожидает клиент 1С.
HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols) или с помощью специализированных утилит, таких как IIS Crypto.Если вы видите, что ваш браузер использует "TLS 1.2, AES с 256 разрядным шифрованием (Высокий); DH с 2048 разрядным обменом", это хороший признак, но иногда могут быть нюансы в конкретных реализациях.
В вашем коде 1С вы используете параметр ЗащищенноеСоединение, что является абсолютно правильным подходом при работе с HTTPS. Важно, как именно вы инициализируете этот объект.
В нашем случае, используется следующий фрагмент кода:
ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(Новый СертификатКлиентаWindows, Новый СертификатыУдостоверяющихЦентровWindows);
Этот код указывает 1С использовать хранилища сертификатов Windows для клиента и удостоверяющих центров. Это стандартный и в большинстве случаев достаточный подход. Однако:
СертификатКлиентаWindows: Если веб-сервис требует клиентский сертификат (аутентификацию клиента по сертификату), то этот сертификат должен быть установлен в хранилище "Личные" (Personal) пользователя, от имени которого запущен клиент или сервер 1С. В данном случае, судя по ошибке инициализации SSL, проблема не в клиентской аутентификации, но иметь это в виду полезно.СертификатыУдостоверяющихЦентровWindows: Это относится к проверке цепочки доверия сертификата сервера. Именно здесь 1С будет искать корневой сертификат вашего самоподписанного сертификата. Если сертификат не найден в хранилищах Windows на машине, где выполняется код 1С, возникнет ошибка инициализации SSL, так как 1С не сможет проверить подлинность сервера. Это ключевой момент, который подтверждает важность пункта 2.В редких случаях, когда есть несовместимости между реализацией SSL в Windows и библиотеками, используемыми 1С, или при работе со специфическими внешними ресурсами, может потребоваться использование НовоеЗащищенноеСоединениеOpenSSL. Однако, для большинства стандартных сценариев, подход с СертификатКлиентаWindows и СертификатыУдостоверяющихЦентровWindows является корректным.
Иногда даже при правильно настроенном IIS и установленных сертификатах проблема может быть вызвана промежуточными звеньями сети:
Для решения проблемы "Ошибка инициализации SSL-соединения", мы рекомендуем следующий план действий:
ЗащищенноеСоединение корректно инициализируется с использованием Новый СертификатыУдостоверяющихЦентровWindows, и эти хранилища доступны и актуальны.Последовательная проверка каждого из этих пунктов позволит локализовать и устранить причину ошибки инициализации SSL-соединения, обеспечив бесшовную интеграцию ваших информационных систем на платформе 1С:Предприятие.