При разработке мобильных решений на платформе 1С:Предприятие часто возникает необходимость безопасной работы с сертификатами. Одной из частых задач является взаимодействие с системным хранилищем Keychain (или Keystore в Android) для выбора пользовательского сертификата. Разберем, как подойти к этой задаче правильно, не прибегая к созданию сторонних «прокладок» или внешних компонент.
Ранее многие разработчики пытались решить задачу вызова окна выбора сертификата путем прямого обращения к системным функциям Android через ЗапускПриложенияМобильногоУстройства() с передачей интентов, таких как com.android.keychain.CHOOSER. Однако на практике такой подход чаще всего приводит к тому, что приложение Keychain аварийно закрывается («схлопывается»).
Почему это происходит? Мобильная платформа 1С выступает как доверенный контейнер, и Android накладывает строгие ограничения на передачу контекста безопасности. Система ожидает прямого запроса от основного процесса приложения, обладающего соответствующими привилегиями. Попытка «прокинуть» интент через 1С часто блокируется системой безопасности Android из-за отсутствия прямого контекста делегирования.
Вместо использования низкоуровневых системных вызовов, мы рекомендуем использовать штатные средства мобильной платформы 1С. Современные версии платформы значительно расширили возможности работы с криптографией, позволяя обходиться без разработки дополнительного Java-кода.
Для работы с сертификатами следует использовать МенеджерКриптографии. Этот объект предоставляет интерфейс для взаимодействия с сертификатами, установленными в системе или внутри контейнера приложения 1С. Данный подход обладает рядом преимуществ:
Разберем основные шаги реализации функционала:
Прежде всего, убедитесь, что ваши сертификаты правильно импортированы в системное хранилище или доступны для 1С. Вместо вызова визуального выбора через интент, мы настраиваем МенеджерКриптографии на работу с доступными сертификатами.
В коде 1С работа выглядит следующим образом:
// Инициализация менеджера криптографии для работы с SSL
КриптоМенеджер = Новый МенеджерКриптографии(ТипКриптографии.Майкрософт, "", 75);
// Здесь производится получение списка установленных сертификатов
СписокСертификатов = КриптоМенеджер.ПолучитьСертификаты();
// Далее мы перебираем сертификаты и находим нужный по отпечатку или владельцу
Для Каждого Серт Из СписокСертификатов Цикл
// Логика работы с конкретным сертификатом
// Например: использование для подписи или аутентификации
КонецЦикла;
Использование внешних компонент (ВК) для вызова Keychain — это сложный путь, требующий поддержки кода на языке Java/Kotlin, регулярного обновления при выходе новых версий Android API и обеспечения совместимости с JNI. Если функционал можно реализовать средствами платформы, всегда выбирайте именно этот вариант. Использование встроенного МенеджераКриптографии обеспечивает:
Мы выяснили, что прямые вызовы системных интентов для доступа к Keychain не являются оптимальным путем в архитектуре 1С. Вместо попыток «взломать» систему через сторонние вызовы, необходимо задействовать штатные механизмы платформы 1С. Это делает ваше мобильное решение надежным, безопасным и простым в сопровождении. Пользуйтесь возможностями МенеджераКриптографии для интеграции сертификатов SSL и обеспечения защищенного соединения с вашими сервисами.