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

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

При попытке установить защищенное соединение с веб-сервисом 1С, опубликованным на веб-сервере IIS, часто возникает ошибка "Ошибка инициализации SSL-соединения". Эта проблема особенно актуальна при использовании самоподписанных сертификатов и интеграции конфигураций, таких как 1С:Документооборот и 1С:Бухгалтерия Предприятия. Давайте подробно рассмотрим причины возникновения этой ошибки и предложим комплексные решения.

Предположим, у нас есть система, где 1С:Документооборот и 1С:Бухгалтерия Предприятия (БП) работают на платформе 8.3.21.1622. Веб-сервер IIS настроен, веб-сервисы интеграции опубликованы и доступны через браузер. Однако при попытке программного подключения к веб-сервису из 1С с использованием следующего кода:


Определения = Новый WSОпределения(МестоположениеWSDL + "ws/dm.1cws?wsdl", ИмяПользователя, Пароль, ИнтернетПрокси, Таймаут, ЗащищенноеСоединение, ПоддерживаетсяАутентификацияОС И ИспользуетсяАутентификацияОС);

Мы получаем ошибку: "При вызове веб-сервиса произошла ошибка. При создании описания сервиса произошла ошибка. URL сервиса: по причине: Ошибка работы с Интернет: Ошибка инициализации SSL-соединения Ошибка при вызове конструктора (WSОпределения)". Давайте разберем по шагам, что могло пойти не так и как это исправить.

1. Проверка самоподписанного сертификата и его привязки в IIS

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

  1. Правильность имени хоста: Удостоверьтесь, что имя хоста в URL веб-сервиса (например, МестоположениеWSDL) точно соответствует имени, указанному в поле "Выдан кому" вашего SSL-сертификата. Если в сертификате указано my-server.local, а вы обращаетесь по 192.168.1.100 или my-server, возникнет ошибка проверки имени хоста, которая приводит к сбою SSL-соединения. Для самоподписанных сертификатов это критично, так как они не проходят внешнюю проверку.
  2. Привязка к порту: Необходимо проверить, что сертификат корректно привязан к порту 443 (или другому используемому порту HTTPS) в настройках вашего "Default Web Site" или другого сайта в IIS. В IIS Manager перейдите к "Default Web Site" (или вашему сайту), выберите "Привязки" (Bindings) и убедитесь, что для типа https указан правильный IP-адрес, порт и выбран ваш SSL-сертификат.
  3. Действительность сертификата: Хотя сертификат и самоподписанный, он должен быть действующим, то есть не просроченным и не отозванным.

Для быстрой диагностики можно попробовать открыть URL веб-сервиса (например, https://your_server/ws/dm.1cws?wsdl) в браузере. В браузере (например, Chrome, Firefox) посмотрите детали соединения (обычно нажав на значок замка в адресной строке). Нас интересуют следующие параметры:

Это позволит подтвердить, что IIS корректно отдает сертификат и устанавливает защищенное соединение на стороне сервера.

2. Установка сертификата в доверенные хранилища

Одной из наиболее частых причин ошибки инициализации SSL-соединения при использовании самоподписанных сертификатов является отсутствие доверия к ним со стороны операционной системы, на которой выполняется клиентский код 1С. Важно понимать, что установка сертификата на IIS не означает его автоматическое доверие на других машинах или даже на том же сервере, но для других пользователей/служб.

  1. На компьютере, откуда выполняется клиент 1С: Если веб-сервис вызывается из тонкого/толстого клиента 1С, то корневой сертификат (или сам самоподписанный сертификат) должен быть установлен в хранилище сертификатов "Доверенные корневые центры сертификации" (Trusted Root Certification Authorities) на той машине, где запущен клиент 1С.
  2. На сервере 1С:Предприятия: Если вызов веб-сервиса происходит из фонового задания, регламентного задания или серверного модуля на сервере 1С:Предприятия, то сертификат должен быть установлен:
    • В хранилище сертификатов пользователя, от имени которого запущен сервис 1С:Предприятия (обычно это Local System или Сетевая служба).
    • Или в хранилище сертификатов компьютера.

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

  3. Импорт сертификата: Для импорта сертификата в хранилище "Доверенные корневые центры сертификации" на Windows:
    1. Откройте консоль управления сертификатами (certlm.msc для компьютера или certmgr.msc для текущего пользователя).
    2. Перейдите в "Доверенные корневые центры сертификации" -> "Сертификаты".
    3. Щелкните правой кнопкой мыши -> "Все задачи" -> "Импорт".
    4. Следуйте мастеру, указав путь к вашему файлу сертификата (обычно .cer или .crt) и выбрав хранилище "Доверенные корневые центры сертификации".

Даже если вы уверены, что сертификат добавлен, перепроверьте, что добавлен именно корневой сертификат (если ваш самоподписанный сертификат является конечным в цепочке) или сам самоподписанный сертификат. Ошибки здесь могут быть незаметными.

3. Настройки протоколов и наборов шифров TLS/SSL в IIS

Хотя ваш браузер может показывать, что IIS использует TLS 1.2, это не всегда означает, что клиент 1С сможет успешно установить соединение. Важно проверить, что набор шифров (Cipher Suites) и протоколы TLS/SSL, поддерживаемые IIS, совместимы с тем, что ожидает клиент 1С.

  1. Совместимость протоколов: Убедитесь, что IIS не настроен только на устаревшие протоколы (например, SSLv2.0 или SSLv3.0), которые современными клиентами 1С могут быть отклонены по соображениям безопасности. Современные системы обычно требуют TLS 1.2 или выше. Настройки можно проверить и изменить в реестре Windows (в разделе HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols) или с помощью специализированных утилит, таких как IIS Crypto.
  2. Наборы шифров (Cipher Suites): Некоторые наборы шифров могут быть устаревшими или считаться слабыми. Клиент 1С может отказаться работать с такими наборами. Убедитесь, что IIS поддерживает современные и надежные наборы шифров, которые также поддерживаются библиотеками SSL, используемыми 1С.

Если вы видите, что ваш браузер использует "TLS 1.2, AES с 256 разрядным шифрованием (Высокий); DH с 2048 разрядным обменом", это хороший признак, но иногда могут быть нюансы в конкретных реализациях.

4. Использование параметра ЗащищенноеСоединение в коде 1С

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

В нашем случае, используется следующий фрагмент кода:


ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(Новый СертификатКлиентаWindows, Новый СертификатыУдостоверяющихЦентровWindows);

Этот код указывает 1С использовать хранилища сертификатов Windows для клиента и удостоверяющих центров. Это стандартный и в большинстве случаев достаточный подход. Однако:

  1. СертификатКлиентаWindows: Если веб-сервис требует клиентский сертификат (аутентификацию клиента по сертификату), то этот сертификат должен быть установлен в хранилище "Личные" (Personal) пользователя, от имени которого запущен клиент или сервер 1С. В данном случае, судя по ошибке инициализации SSL, проблема не в клиентской аутентификации, но иметь это в виду полезно.
  2. СертификатыУдостоверяющихЦентровWindows: Это относится к проверке цепочки доверия сертификата сервера. Именно здесь 1С будет искать корневой сертификат вашего самоподписанного сертификата. Если сертификат не найден в хранилищах Windows на машине, где выполняется код 1С, возникнет ошибка инициализации SSL, так как 1С не сможет проверить подлинность сервера. Это ключевой момент, который подтверждает важность пункта 2.

В редких случаях, когда есть несовместимости между реализацией SSL в Windows и библиотеками, используемыми 1С, или при работе со специфическими внешними ресурсами, может потребоваться использование НовоеЗащищенноеСоединениеOpenSSL. Однако, для большинства стандартных сценариев, подход с СертификатКлиентаWindows и СертификатыУдостоверяющихЦентровWindows является корректным.

5. Влияние брандмауэров и прокси-серверов

Иногда даже при правильно настроенном IIS и установленных сертификатах проблема может быть вызвана промежуточными звеньями сети:

  1. Брандмауэр: Убедитесь, что брандмауэр на сервере IIS и на машине, с которой идет обращение к веб-сервису, не блокирует порт 443 (или другой используемый HTTPS-порт).
  2. Прокси-сервер с SSL Inspection: Если в вашей сети используется прокси-сервер, который выполняет инспекцию SSL-трафика (SSL Inspection), это может приводить к подмене сертификата. Прокси-сервер перехватывает SSL-соединение, расшифровывает его своим сертификатом, а затем устанавливает новое SSL-соединение с целевым сервером. В этом случае клиент 1С увидит сертификат прокси-сервера, а не оригинальный сертификат IIS, и выдаст ошибку доверия, если сертификат прокси не установлен как доверенный. В таких случаях необходимо:
    • Настроить исключения на прокси-сервере для адреса вашего веб-сервиса, чтобы SSL Inspection не применялся.
    • Или установить корневой сертификат прокси-сервера в хранилище "Доверенные корневые центры сертификации" на машинах, где выполняется код 1С.

Резюме и план действий

Для решения проблемы "Ошибка инициализации SSL-соединения", мы рекомендуем следующий план действий:

  1. Проверка IIS и сертификата:
    • Убедитесь, что имя хоста в URL совпадает с именем в сертификате.
    • Проверьте корректность привязки сертификата к порту 443 в IIS.
    • Откройте WSDL в браузере и проверьте детали SSL-соединения (TLS 1.2, надежные шифры).
  2. Установка доверия к сертификату:
    • Критически важно: Убедитесь, что корневой (или сам самоподписанный) сертификат добавлен в хранилище "Доверенные корневые центры сертификации" на всех машинах, с которых выполняется код 1С (клиентские машины, сервер 1С:Предприятия).
    • Если сервер 1С работает от системной учетной записи, установите сертификат в хранилище компьютера.
  3. Настройки протоколов TLS в IIS:
    • Используйте TLS 1.2 или выше. Отключите устаревшие SSLv2/3.
    • Проверьте, что в IIS настроены современные и сильные наборы шифров.
  4. Код 1С:
    • Убедитесь, что ЗащищенноеСоединение корректно инициализируется с использованием Новый СертификатыУдостоверяющихЦентровWindows, и эти хранилища доступны и актуальны.
  5. Сетевая инфраструктура:
    • Проверьте брандмауэры.
    • Исключите SSL Inspection на прокси-серверах или установите сертификат прокси.

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

← На главную