Как настроить защищенное HTTPS-соединение между мобильным приложением 1С и центральной базой данных?

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

Организация безопасного обмена данными между мобильным клиентом (или автономным мобильным приложением) и серверной частью 1С через протокол HTTPS — стандартное требование современной корпоративной инфраструктуры. Однако при первой настройке защищенного веб-сервиса разработчики часто сталкиваются с ошибками проверки SSL/TLS на мобильных устройствах. Разберем, как устроена работа с сертификатами в мобильной платформе 1С, выясним причины типичных сбоев и рассмотрим оптимальные варианты решения задачи.

Особенности проверки SSL-сертификатов в мобильной платформе 1С

Проанализируем базовый механизм валидации соединений. Когда мобильное приложение 1С отправляет запрос к опубликованной базе данных по протоколу HTTPS, встроенный криптографический модуль (OpenSSL) проверяет подлинность сервера. Успешное установление соединения зависит от типа используемого SSL-сертификата:

  1. Сертификат от доверенного центра сертификации (CA). Если сертификат на веб-сервере выдан общепризнанным центром (платным или бесплатным, например Let's Encrypt), мобильная операционная система автоматически проверяет всю цепочку доверия. Никаких дополнительных настроек на смартфонах и планшетах пользователей выполнять не требуется.
  2. Самоподписанный сертификат (Self-Signed). Если сертификат сгенерирован самостоятельно внутри локальной сети, операционная система мобильного устройства и встроенный клиент 1С по умолчанию отклонят такое соединение из соображений безопасности. В этом случае требуется обязательная доставка корневого сертификата на устройство или внедрение его в конфигурацию.

Проблемы при использовании самоподписанных сертификатов на мобильных ОС

Посмотрим на сложности, с которыми сталкиваются администраторы и разработчики при попытке использовать самоподписанные сертификаты:

  1. Ограничения безопасности Android (версии 7.0 и новее). В современных версиях Android сторонние приложения по умолчанию не доверяют сертификатам, которые пользователь вручную установил в пользовательское хранилище (User CA). Приложение 1С продолжит выдавать ошибку валидации цепочки, пока сертификат не будет встроен в само приложение или передан программно.
  2. Требования iOS к доверию корневым сертификатам. На устройствах Apple простой установки профиля конфигурации с корневым сертификатом недостаточно. Требуется вручную включить полное доверие в меню настроек устройства: Настройки -> Основные -> Об этом устройстве -> Доверие сертификатов.
  3. Сложность администрирования. При наличии парка из десятков мобильных устройств ручная установка корневых сертификатов на каждое устройство отнимает много времени и приводит к ошибкам пользователей.

Вариант 1: Использование доверенного SSL-сертификата (рекомендуемый способ)

Рассмотрим самый надежный и простой в поддержке подход. Вместо генерации локальных самоподписанных сертификатов на веб-сервер устанавливается сертификат, выпущенный публичным центром сертификации.

  1. Бесплатные сертификаты (Let's Encrypt). Корневые сертификаты Let's Encrypt интегрированы в системные хранилища Android, iOS и Windows. Достаточно настроить автоматическое получение и продление сертификата на веб-сервере (Nginx, Apache, IIS).
  2. Коммерческие сертификаты. Приобретение стандартного доменного сертификата (Domain Validation) полностью снимает необходимость каких-либо манипуляций с мобильными устройствами клиентов.

Для программного обращения к веб-сервису через HTTPS в коде мобильного приложения используется стандартный объект ЗащищенноеСоединениеOpenSSL:


// Создаем защищенное соединение с параметрами по умолчанию
Защита = Новый ЗащищенноеСоединениеOpenSSL();

// Инициализируем HTTP-соединение с веб-сервером
HTTPСоединение = Новый HTTPСоединение(
    "base.example.com", // Имя сервера (должно совпадать с CN/SAN в сертификате)
    443,                // Порт HTTPS
    "Пользователь1С",   // Имя пользователя
    "Пароль1С",        // Пароль
    ,                   // Прокси
    10,                 // Таймаут
    Защита              // Защищенное соединение
);

Вариант 2: Программная передача корневого сертификата в коде 1С

Если корпоративная политика строго запрещает выход во внешнюю сеть и требует работы только с локальным удостоверяющим центром (CA), разберем правильный способ интеграции сертификата в мобильное приложение без вмешательства в системные настройки ОС.

Начиная с версий платформы 8.3.8/8.3.9, в мобильной платформе реализована полноценная поддержка явной передачи файла сертификатов удостоверяющих центров. Корневой сертификат сервера (в формате PEM/CRT) можно поместить в макет конфигурации в виде двоичных данных и выгружать во временный каталог на устройстве:


// Извлекаем сертификат корневого центра из макета мобильного приложения
МакетСертификата = ЭтотОбъект.ПолучитьМакет("КорневойСертификатCA");
ПутьКСертификату = КаталогВременныхФайлов() + "rootCA.crt";
МакетСертификата.Записать(ПутьКСертификату);

// Создаем описание сертификатов удостоверяющих центров
СертификатыCA = Новый СертификатыУдостоверяющихЦентровФайл(ПутьКСертификату);

// Инициализируем защищенное соединение с указанием доверенного корневого центра
Защита = Новый ЗащищенноеСоединениеOpenSSL(
    Неопределено,
    СертификатыCA
);

// Выполняем подключение к веб-серверу
HTTPСоединение = Новый HTTPСоединение(
    "internal-server.local",
    443,
    "Пользователь1С",
    "Пароль1С",
    ,
    15,
    Защита
);

// Удаляем временный файл сертификата после инициализации соединения
УдалитьФайлы(ПутьКСертификату);

Типичные ошибки настройки веб-сервера при работе по HTTPS

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

  1. Неполная цепочка сертификатов (Intermediate CA). Веб-сервер обязан отдавать полный бандл сертификатов (Full Chain), включающий не только сам сертификат домена, но и промежуточные сертификаты удостоверяющего центра. Обычные браузеры на ПК могут кэшировать цепочку, тогда как OpenSSL в мобильной платформе 1С мгновенно завершит сеанс с ошибкой.
  2. Несоответствие Subject Alternative Name (SAN). Доменное имя или IP-адрес, к которому обращается мобильное приложение в строке подключения, должны строго соответствовать имени, прописанному в полях Common Name (CN) или SAN сертификата. Обращение по IP-адресу к серверу, где сертификат выписан на домен, вызовет ошибку валидации.
  3. Версии протокола TLS. Мобильная платформа 1С требует поддержки актуальных версий протоколов (TLS 1.2 и выше) и современных наборов шифров на стороне веб-сервера.
← На главную