Как исправить ошибку SSL connect error при загрузке тайлов OpenStreetMap в 1С?

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

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

Выясним причину: почему возникает SSL connect error?

Прежде всего, разберем ситуацию. Ошибка возникает на этапе установления защищенного соединения (SSL Handshake). Если основной сайт открывается, а поддомен с тайлами (tile.openstreetmap.org) — нет, это указывает на различия в настройках безопасности или требованиях этих ресурсов. Рассмотрим подробнее основные факторы:

  1. Требования к заголовку User-Agent: Серверы OpenStreetMap (OSM) имеют строгую политику использования тайлов. Если запрос не содержит корректного идентификатора приложения, соединение может быть разорвано сервером.
  2. Устаревшие корневые сертификаты: OSM использует сертификаты Let's Encrypt. В 2021 году произошла смена корневого сертификата, и наличие старого DST Root CA X3 в системе часто блокирует проверку цепочки доверия.
  3. Протоколы TLS и QUIC: Современные серверы переходят на TLS 1.3 и протокол HTTP/3 (QUIC). Встроенные движки отображения в 1С (особенно старые версии WebKit или IE) могут не поддерживать эти протоколы в полной мере.
  4. Механизм SNI (Server Name Indication): На одном IP-адресе тайловых серверов может располагаться множество ресурсов. Если клиент не передает имя хоста в TLS-приветствии, сервер не сможет предоставить нужный сертификат.

Шаг 1: Проверка и обновление хранилища сертификатов

Разберем, как 1С проверяет сертификаты. Платформа может использовать системное хранилище (Windows) или собственный файл cacert.pem, расположенный в папке bin установленной платформы. Рассмотрим алгоритм действий по обновлению сертификатов:

Во-первых, проанализируем содержимое файла cacert.pem. Нам необходимо убедиться, что в нем присутствует актуальный корневой сертификат ISRG Root X1. Если в файле до сих пор присутствует DST Root CA X3 с истекшим сроком годности, его необходимо удалить, так как некоторые версии OpenSSL/libcurl, используемые в 1С, могут ошибочно выбирать именно его для проверки.

Во-вторых, если используется ОС Windows, убедимся, что в системном хранилище установлены актуальные обновления корневых сертификатов. Проверим это через оснастку certmgr.msc в разделе "Доверенные корневые центры сертификации".

Шаг 2: Настройка User-Agent и заголовков запроса

Если мы загружаем тайлы не напрямую в Поле 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. В параметрах этого объекта можно явно указать путь к обновленному файлу сертификатов, если системные настройки не помогают.

Шаг 3: Выбор движка отображения в Поле HTML документа

Проанализируем ситуацию с отображением через встроенный браузер. В 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 эти протоколы не активированы через реестр, соединение с современными серверами будет невозможно.

Шаг 4: Решение проблемы с QUIC и HTTP/3

Как было замечено в обсуждении, ресурс tile.openstreetmap.org может предлагать соединение через протокол QUIC. Некоторые реализации WebKit в 1С могут некорректно обрабатывать попытку переключения (Upgrade) на этот протокол. Рассмотрим вариант обхода через использование прокси или локального скрипта.

Часто помогает принудительное использование системных настроек прокси-сервера или, наоборот, их отключение в настройках 1С. В файле inetcfg.xml можно попробовать явно задать использование определенных параметров защиты.

Итоговые рекомендации для стабильной работы

Подводя итог, если вы столкнулись с ошибкой SSL connect error при работе с картами, выполните следующие действия:

Соблюдение этих технических требований позволит корректно отображать картографическую информацию и обеспечит надежную работу вашего приложения с внешними API.

← На главную