При разработке картографических решений в среде 1С:Предприятие разработчики часто сталкиваются с ситуацией, когда основная страница сервиса (например, openstreetmap.org) открывается корректно, однако попытка загрузить конкретные изображения-тайлы через Поле HTML документа приводит к ошибке SSL connect error. Проанализируем причины этой проблемы и разберем пошагово методы её решения, опираясь на технические особенности платформы и требования безопасности современных веб-сервисов.
Прежде всего, разберем ситуацию. Ошибка возникает на этапе установления защищенного соединения (SSL Handshake). Если основной сайт открывается, а поддомен с тайлами (tile.openstreetmap.org) — нет, это указывает на различия в настройках безопасности или требованиях этих ресурсов. Рассмотрим подробнее основные факторы:
DST Root CA X3 в системе часто блокирует проверку цепочки доверия.Разберем, как 1С проверяет сертификаты. Платформа может использовать системное хранилище (Windows) или собственный файл cacert.pem, расположенный в папке bin установленной платформы. Рассмотрим алгоритм действий по обновлению сертификатов:
Во-первых, проанализируем содержимое файла cacert.pem. Нам необходимо убедиться, что в нем присутствует актуальный корневой сертификат ISRG Root X1. Если в файле до сих пор присутствует DST Root CA X3 с истекшим сроком годности, его необходимо удалить, так как некоторые версии OpenSSL/libcurl, используемые в 1С, могут ошибочно выбирать именно его для проверки.
Во-вторых, если используется ОС Windows, убедимся, что в системном хранилище установлены актуальные обновления корневых сертификатов. Проверим это через оснастку certmgr.msc в разделе "Доверенные корневые центры сертификации".
Если мы загружаем тайлы не напрямую в Поле HTML документа, а предварительно скачиваем их через код 1С, крайне важно правильно настроить объект HTTPСоединение. Посмотрим на пример кода, который позволяет избежать блокировки со стороны серверов OSM:
&НаСервере
Функция ПолучитьКартинкуТайла(URLТайла)
// Разберем URL для создания соединения
ИмяСервера = "tile.openstreetmap.org";
ПутьКРесурсу = "/19/306197/152349.png";
// Обязательно указываем User-Agent, идентифицирующий ваше приложение
Заголовки = Новый Соответствие;
Заголовки.Вставить("User-Agent", "My1CMapApp/1.0 (contact@mycompany.com)");
// Используем защищенное соединение
Защита = Новый ЗащитаСоединенияOpenSSL();
Соединение = Новый HTTPСоединение(ИмяСервера, 443,,,,, Защита);
Запрос = Новый HTTPЗапрос(ПутьКРесурсу, Заголовки);
Попытка
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
Возврат Ответ.ПолучитьТелоКакДвоичныеДанные();
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации("Ошибка загрузки тайла", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
КонецПопытки;
КонецФункции
Важный момент: В данном примере мы используем объект ЗащитаСоединенияOpenSSL. В параметрах этого объекта можно явно указать путь к обновленному файлу сертификатов, если системные настройки не помогают.
Проанализируем ситуацию с отображением через встроенный браузер. В 1С Поле HTML документа может работать в двух режимах: на движке Internet Explorer (в режиме совместимости или без) и на базе WebKit (Chromium-based в новых версиях платформы).
Если платформа использует WebKit, она опирается на собственные библиотеки шифрования. В этом случае критически важно, чтобы файл cacert.pem в каталоге программы был актуален. Попробуем обновить его, скачав последнюю версию с официального сайта curl.se.
Если используется движок Internet Explorer, настройки шифрования берутся из параметров Windows. Выясним причину через "Свойства браузера": необходимо убедиться, что включены протоколы TLS 1.2 и TLS 1.3. Если в ОС Windows 7 или Server 2008 R2 эти протоколы не активированы через реестр, соединение с современными серверами будет невозможно.
Как было замечено в обсуждении, ресурс tile.openstreetmap.org может предлагать соединение через протокол QUIC. Некоторые реализации WebKit в 1С могут некорректно обрабатывать попытку переключения (Upgrade) на этот протокол. Рассмотрим вариант обхода через использование прокси или локального скрипта.
Часто помогает принудительное использование системных настроек прокси-сервера или, наоборот, их отключение в настройках 1С. В файле inetcfg.xml можно попробовать явно задать использование определенных параметров защиты.
Подводя итог, если вы столкнулись с ошибкой SSL connect error при работе с картами, выполните следующие действия:
cacert.pem во всех установленных версиях платформы 1С на сервере и клиенте.DST Root CA X3.HTTPСоединение в коде, чтобы исключить проблемы именно визуального компонента (Поля HTML документа).Соблюдение этих технических требований позволит корректно отображать картографическую информацию и обеспечит надежную работу вашего приложения с внешними API.