При разработке мобильных приложений на платформе 1С часто возникает задача обеспечить безопасную передачу данных между устройством и сервером. Стандартным решением является использование протокола HTTPS. Однако многие разработчики сталкиваются с проблемой: после публикации веб-сервиса с SSL-сертификатом он отлично открывается в браузере на ПК, но мобильное приложение 1С отказывается подключаться, выдавая ошибку о недоверенном сертификате. Разберемся, почему так происходит и какие есть способы решения этой проблемы.
Основная причина кроется в механизме доверия к сертификатам в мобильных операционных системах (Android и iOS). В отличие от настольного браузера, куда можно легко добавить исключение безопасности, мобильная платформа 1С строго следует системным политикам. ОС доверяет только тем SSL-сертификатам, которые выпущены аккредитованными удостоверяющими центрами (CA), корневые сертификаты которых уже встроены в систему.
Основные сценарии, приводящие к ошибке:
Google Play и App Store требуют, чтобы весь трафик приложения был зашифрован. Поэтому использование HTTPS является не просто рекомендацией, а обязательным условием для публикации. Рассмотрим два проверенных способа настроить корректную работу.
Этот подход является наиболее правильным и универсальным. Его суть — настроить сервер таким образом, чтобы любой клиент, включая мобильное приложение 1С, доверял ему без каких-либо дополнительных манипуляций на самом устройстве. Для этого не нужен дорогой сертификат; достаточно бесплатного сертификата начального уровня, который часто идет в комплекте с регистрацией домена.
Разберем по шагам, как это реализовать:
Вам понадобится собственное доменное имя. Его можно зарегистрировать у любого регистратора (например, reg.ru). Часто стоимость домена в простых зонах очень низкая. К многим доменам регистраторы предлагают бесплатный SSL-сертификат начального уровня на год.
Если ваш сервер не имеет статического "белого" IP-адреса, воспользуйтесь сервисом динамического DNS, например, no-ip.com. Зарегистрируйте там бесплатный хост (например, vasia.ddns.net). На сервер нужно будет установить клиентскую программу от этого сервиса, которая будет автоматически обновлять IP-адрес, привязанный к вашему хосту.
В панели управления вашим доменом (на сайте регистратора) нужно настроить DNS-записи. Удалите все существующие записи (типа A, MX и др.) и добавьте одну запись типа CNAME:
vasia.ddns.netПосле этого запросы к www.yourdomain.com будут перенаправляться на ваш сервер через сервис динамического DNS.
Теперь выпустите SSL-сертификат для вашего домена (www.yourdomain.com). Очень внимательно следуйте инструкциям регистратора или центра сертификации. После получения файлов сертификата (обычно это сам сертификат, ключ и цепочка сертификатов) их нужно установить на ваш веб-сервер (Apache или IIS).
Это самый важный шаг! Убедитесь, что вы правильно прописали пути ко всем файлам в конфигурации веб-сервера. Неправильная настройка, особенно отсутствие файла с цепочкой промежуточных сертификатов, — главная причина проблем с мобильными клиентами.
После завершения этих шагов ваш веб-сервис, опубликованный по адресу https://www.yourdomain.com, будет доступен из мобильного приложения 1С без ошибок. Никаких сертификатов на сам смартфон устанавливать не потребуется. Будет работать и подключение к информационной базе, и обновление конфигурации через HTTPS.
В некоторых случаях, даже при наличии корректно настроенного сертификата, может потребоваться явно указать в коде 1С, что нужно использовать защищенное соединение. Это также является хорошей практикой, так как делает код более явным и управляемым. Для этого в платформе 1С существует специальный объект ЗащищенноеСоединениеOpenSSL.
Посмотрим на пример кода для работы с веб-сервисом через HTTPS:
// Создаем объект для работы с защищенным соединением
ssl = Новый ЗащищенноеСоединениеOpenSSL;
// Получаем определения веб-сервиса, передавая объект SSL
// Параметры: URL, Логин, Пароль, Таймаут, SSL-соединение
Определения = Новый WSОпределения("https://www.yourdomain.com/ws/service.1cws?wsdl", "User", "PASS", 30, ssl);
// Создаем прокси для вызова методов веб-сервиса, также передавая объект SSL
Прокси = Новый WSПрокси(Определения, "name_service", "name_serviceWS", "name_serviceWSSoap", , 30, ssl);
// Указываем аутентификационные данные
Прокси.Пользователь = "User";
Прокси.Пароль = "PASS";
// Теперь можно вызывать методы веб-сервиса
Результат = Прокси.ИмяМетода(Параметры);
Проанализируем этот код:
Новый ЗащищенноеСоединениеOpenSSL: этот конструктор создает объект, который инкапсулирует в себе параметры для установки TLS-соединения. У него есть свойства для более тонкой настройки (например, для указания клиентского сертификата), но в простом случае достаточно создать его без параметров.Новый WSОпределения(...) и Новый WSПрокси(...): мы передаем созданный объект ssl в качестве последнего параметра в конструкторы этих объектов. Таким образом, платформа 1С понимает, что для всех HTTP-запросов, связанных с этим веб-сервисом, нужно использовать защищенный канал.Этот метод гарантирует, что соединение будет установлено корректно. Однако он не отменяет необходимости иметь на сервере валидный, доверенный сертификат. Этот код не заставит приложение "поверить" самоподписанному сертификату, но обеспечит правильную работу с легитимным HTTPS-ресурсом.
В сборщике мобильных приложений есть раздел "Сертификаты". Как выяснилось в ходе обсуждения, этот раздел предназначен преимущественно для приложений под iOS и используется для специфических задач, например, для подписи самого приложения или для работы с push-уведомлениями. Для организации доверия к HTTPS-серверу на Android он, как правило, не используется. Правильный путь — это настройка сервера, как описано в решении 1.