Организация безопасного обмена данными между мобильным клиентом (или автономным мобильным приложением) и серверной частью 1С через протокол HTTPS — стандартное требование современной корпоративной инфраструктуры. Однако при первой настройке защищенного веб-сервиса разработчики часто сталкиваются с ошибками проверки SSL/TLS на мобильных устройствах. Разберем, как устроена работа с сертификатами в мобильной платформе 1С, выясним причины типичных сбоев и рассмотрим оптимальные варианты решения задачи.
Проанализируем базовый механизм валидации соединений. Когда мобильное приложение 1С отправляет запрос к опубликованной базе данных по протоколу HTTPS, встроенный криптографический модуль (OpenSSL) проверяет подлинность сервера. Успешное установление соединения зависит от типа используемого SSL-сертификата:
Посмотрим на сложности, с которыми сталкиваются администраторы и разработчики при попытке использовать самоподписанные сертификаты:
Рассмотрим самый надежный и простой в поддержке подход. Вместо генерации локальных самоподписанных сертификатов на веб-сервер устанавливается сертификат, выпущенный публичным центром сертификации.
Для программного обращения к веб-сервису через HTTPS в коде мобильного приложения используется стандартный объект ЗащищенноеСоединениеOpenSSL:
// Создаем защищенное соединение с параметрами по умолчанию
Защита = Новый ЗащищенноеСоединениеOpenSSL();
// Инициализируем HTTP-соединение с веб-сервером
HTTPСоединение = Новый HTTPСоединение(
"base.example.com", // Имя сервера (должно совпадать с CN/SAN в сертификате)
443, // Порт HTTPS
"Пользователь1С", // Имя пользователя
"Пароль1С", // Пароль
, // Прокси
10, // Таймаут
Защита // Защищенное соединение
);
Если корпоративная политика строго запрещает выход во внешнюю сеть и требует работы только с локальным удостоверяющим центром (CA), разберем правильный способ интеграции сертификата в мобильное приложение без вмешательства в системные настройки ОС.
Начиная с версий платформы 8.3.8/8.3.9, в мобильной платформе реализована полноценная поддержка явной передачи файла сертификатов удостоверяющих центров. Корневой сертификат сервера (в формате PEM/CRT) можно поместить в макет конфигурации в виде двоичных данных и выгружать во временный каталог на устройстве:
// Извлекаем сертификат корневого центра из макета мобильного приложения
МакетСертификата = ЭтотОбъект.ПолучитьМакет("КорневойСертификатCA");
ПутьКСертификату = КаталогВременныхФайлов() + "rootCA.crt";
МакетСертификата.Записать(ПутьКСертификату);
// Создаем описание сертификатов удостоверяющих центров
СертификатыCA = Новый СертификатыУдостоверяющихЦентровФайл(ПутьКСертификату);
// Инициализируем защищенное соединение с указанием доверенного корневого центра
Защита = Новый ЗащищенноеСоединениеOpenSSL(
Неопределено,
СертификатыCA
);
// Выполняем подключение к веб-серверу
HTTPСоединение = Новый HTTPСоединение(
"internal-server.local",
443,
"Пользователь1С",
"Пароль1С",
,
15,
Защита
);
// Удаляем временный файл сертификата после инициализации соединения
УдалитьФайлы(ПутьКСертификату);
Проанализируем распространенные технические нюансы, из-за которых мобильное приложение 1С может выдавать ошибку соединения даже при наличии корректного сертификата: