При разработке мобильных приложений на платформе 1С:Предприятие одной из самых трудоемких задач является настройка стабильного обмена данными с центральной базой через веб-сервисы. Часто возникает ситуация: в локальной сети по протоколу HTTP всё работает идеально, но при переходе на защищенное соединение HTTPS и публикации сервиса во внешний мир, мобильный клиент выдает лаконичную, но критическую ошибку: «Не могу установить соединение». Разберем по шагам, почему это происходит и как настроить систему корректно.
Прежде всего, проанализируем концептуальную ошибку, с которой сталкиваются многие разработчики. В коде инициализации прокси-сервиса часто путают два разных понятия. Рассмотрим фрагмент кода, представленный в вопросе:
ПараметрыПодключения = Новый Структура;
ПараметрыПодключения.Вставить("URI", "https://1c.companyname.com:48443/mobile");
// ...
Сервис = WSСсылки.WSСсылкаOrders.СоздатьWSПрокси(ПараметрыПодключения.URI, ПараметрыПодключения.ИмяСервиса, ПараметрыПодключения.ИмяПорта, ...);
Выясним причину возможной путаницы. В методе СоздатьWSПрокси первым параметром передается URIПространстваИмен. Это не адрес в интернете, а уникальный идентификатор типов данных, описанный в WSDL-схеме вашего сервиса. Рассмотрим подробнее:
"http://www.company.com/orders"), которая задается в свойствах объекта Веб-сервис в Конфигураторе. Она не обязана быть рабочей ссылкой."https://1c.companyname.com/base/ws/orders.1cws").Если вы при публикации изменили адрес сервера, но в коде передаете новый URL туда, где ожидается старый URI пространства имен, 1С не сможет сопоставить типы данных, и соединение не будет установлено. Проверьте, чтобы в первом параметре СоздатьWSПрокси всегда передавалось именно то значение, которое указано в поле «Пространство имен» вашего веб-сервиса в конфигурации.
Если с адресами всё верно, но ошибка сохраняется, проанализируем ситуацию с сертификатами. Мобильная платформа 1С (особенно на Android и iOS) гораздо строже относится к безопасности, чем обычный браузер на Windows. Рассмотрим типичные проблемы:
1. Самоподписанные сертификаты. Если вы создали сертификат самостоятельно, мобильное устройство по умолчанию ему не доверяет. В этом случае операционная система просто обрывает соединение на этапе рукопожатия (Handshake). Чтобы решить эту проблему, необходимо вручную импортировать файл корневого сертификата (в формате .crt или .cer) в хранилище доверенных сертификатов самого смартфона.
2. Неполная цепочка сертификатов (Intermediate Certificates). Это наиболее коварная причина. Когда вы покупаете сертификат, центр сертификации выдает вам основной сертификат и один или несколько промежуточных (Intermediate). Браузеры на десктопе часто умеют сами докачивать недостающие звенья цепи, но мобильная платформа 1С этого не делает. Если на веб-сервере (Apache или IIS) не настроена отдача полной цепочки (Full Chain), мобильное приложение выдаст ошибку соединения.
Для проверки рекомендуется использовать специализированные онлайн-сервисы проверки SSL. Если проверка показывает «Chain issues» или «Incomplete chain», вам необходимо объединить ваш сертификат и промежуточные сертификаты в один файл и обновить настройки веб-сервера.
Посмотрим на пример кода, который часто используется для работы через HTTPS:
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
Сервис = WSСсылки.WSСсылкаOrders.СоздатьWSПрокси(
ПараметрыПодключения.URI,
ПараметрыПодключения.ИмяСервиса,
ПараметрыПодключения.ИмяПорта,
,
ПараметрыПодключения.Таймаут,
ЗащищенноеСоединение
);
Обратите внимание на объект ЗащищенноеСоединениеOpenSSL. На мобильных устройствах параметры этого объекта могут играть решающую роль. Если вы используете Неопределено в конструкторе, система пытается использовать стандартные настройки ОС. Если же на сервере используются специфические требования к проверке отзыва сертификатов или нестандартные криптопровайдеры, может потребоваться более тонкая настройка объекта СертификатыУдостоверяющихЦентров.
Проанализируем ситуацию с сетевой доступностью. Использование нестандартных портов, таких как 48443, может привести к ряду проблем:
443.Выясним причину, связанную со сборкой самого приложения. Если вы собираете автономное мобильное приложение (apk или ipa), убедитесь, что в параметрах сборки установлены соответствующие разрешения. Без флага «Использовать интернет» (INTERNET) в манифесте приложения любые попытки вызвать WSПрокси будут блокироваться на уровне операционной системы, при этом 1С будет выдавать общую ошибку соединения.
Также стоит учитывать политику Android Network Security Config. Начиная с Android 9, система запрещает передачу данных в открытом виде (Cleartext traffic). Хотя вы используете HTTPS, убедитесь, что в процессе обращения не происходит редиректов на HTTP-адреса, так как это приведет к мгновенному разрыву сессии.
Чтобы окончательно решить проблему, рекомендуем выполнить следующие действия:
https://ваша_ссылка/ws/Orders?wsdl). Если браузер выдает предупреждение о безопасности — проблема в сертификате.URIПространстваИмен в первом параметре СоздатьWSПрокси. Он должен совпадать с тем, что указано в конфигурации 1С, а не с URL в адресной строке.Следуя этим рекомендациям и внимательно проверяя цепочку SSL-сертификатов, вы сможете успешно настроить защищенное соединение между мобильным приложением 1С и веб-сервисом.