Как реализовать работу с Keychain в мобильном приложении 1С на Android без написания «прокладок»?

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

При разработке мобильных решений на платформе 1С:Предприятие часто возникает необходимость безопасной работы с сертификатами. Одной из частых задач является взаимодействие с системным хранилищем Keychain (или Keystore в Android) для выбора пользовательского сертификата. Разберем, как подойти к этой задаче правильно, не прибегая к созданию сторонних «прокладок» или внешних компонент.

Анализ проблемы вызова системных интентов

Ранее многие разработчики пытались решить задачу вызова окна выбора сертификата путем прямого обращения к системным функциям Android через ЗапускПриложенияМобильногоУстройства() с передачей интентов, таких как com.android.keychain.CHOOSER. Однако на практике такой подход чаще всего приводит к тому, что приложение Keychain аварийно закрывается («схлопывается»).

Почему это происходит? Мобильная платформа 1С выступает как доверенный контейнер, и Android накладывает строгие ограничения на передачу контекста безопасности. Система ожидает прямого запроса от основного процесса приложения, обладающего соответствующими привилегиями. Попытка «прокинуть» интент через 1С часто блокируется системой безопасности Android из-за отсутствия прямого контекста делегирования.

Решение через встроенный Менеджер Криптографии

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

Для работы с сертификатами следует использовать МенеджерКриптографии. Этот объект предоставляет интерфейс для взаимодействия с сертификатами, установленными в системе или внутри контейнера приложения 1С. Данный подход обладает рядом преимуществ:

  1. Отсутствие необходимости в разработке внешней компоненты (ВК).
  2. Соответствие лицензионному соглашению, так как мы не модифицируем исходный код платформы.
  3. Безопасность: работа идет в рамках доверенного контекста, предусмотренного разработчиками 1С.

Принципы работы с Менеджером Криптографии

Разберем основные шаги реализации функционала:

Прежде всего, убедитесь, что ваши сертификаты правильно импортированы в системное хранилище или доступны для 1С. Вместо вызова визуального выбора через интент, мы настраиваем МенеджерКриптографии на работу с доступными сертификатами.

В коде 1С работа выглядит следующим образом:


// Инициализация менеджера криптографии для работы с SSL
КриптоМенеджер = Новый МенеджерКриптографии(ТипКриптографии.Майкрософт, "", 75);
// Здесь производится получение списка установленных сертификатов
СписокСертификатов = КриптоМенеджер.ПолучитьСертификаты();

// Далее мы перебираем сертификаты и находим нужный по отпечатку или владельцу
Для Каждого Серт Из СписокСертификатов Цикл
    // Логика работы с конкретным сертификатом
    // Например: использование для подписи или аутентификации
КонецЦикла;

Почему не стоит использовать «прокладки»?

Использование внешних компонент (ВК) для вызова Keychain — это сложный путь, требующий поддержки кода на языке Java/Kotlin, регулярного обновления при выходе новых версий Android API и обеспечения совместимости с JNI. Если функционал можно реализовать средствами платформы, всегда выбирайте именно этот вариант. Использование встроенного МенеджераКриптографии обеспечивает:

Заключение

Мы выяснили, что прямые вызовы системных интентов для доступа к Keychain не являются оптимальным путем в архитектуре 1С. Вместо попыток «взломать» систему через сторонние вызовы, необходимо задействовать штатные механизмы платформы 1С. Это делает ваше мобильное решение надежным, безопасным и простым в сопровождении. Пользуйтесь возможностями МенеджераКриптографии для интеграции сертификатов SSL и обеспечения защищенного соединения с вашими сервисами.

← На главную