• КриптоПро DSS
  • КриптоПро Ключ
  • КриптоПро SVS
  • Центр Мониторинга

    Показать/Скрыть содержание
    • Аннотация
    • Руководство разработчика iOS
      • Аннотация
      • Классы
        • Класс CryptoProDSS
        • Класс Auth
        • Класс Cert
        • Класс Policy
        • Класс Docs
        • Класс Sign
        • Класс SigningKey
      • Типы данных
        • Запрос на подтверждение клиентской операции DSSApproveRequestMO
        • Запрос на подтверждение серверной операции DSSApproveRequestMT
        • Режим использования SDK (поддерживаемые типы ключей аутентификации) DSSAuthKeyType
        • Сведения о сертификате или запросе на сертификат DSSCertificate
        • Причина отзыва сертификата DSSCertRevokeReason
        • Режим подтверждения операции DSSConfirmationSendingMode
        • Тип ключевого контейнера DSSCryptoKeyContainerType
        • Сведения о криптопровайдере DSSCryptoProviderInfo
        • Учётные данные для криптопровайдера (NFC) DSSCryptoProviderInfoCreds
        • Сведения об устройствах пользователя DSSDevices
        • Сведения о документе DSSDocument
        • Сведения о ключе подписи на внешнем носителе DSSExternalKeyCertificateModel
        • Содержимое документа либо ссылка на документ в файловой системе DSSNetReqResDownloadType
        • Сведения об операции DSSOperation
        • Cписок записей аудита для определенного пользователя и устройства DSSOperationHistory
        • Список операций для подтверждения DSSOperationsInfo
        • Политика взаимодействия с сервером DSSPolicyPayload
        • Способ защиты вектора аутентификации (DSSProtectionType)
        • Информация о загруженном с сервера документе (DSSPublicDocInfo)
        • Данные из QR-кода (DSSQrData)
        • Сведения о регистрируемом устройстве пользователя DSSRegisterInfo
        • Результат выполнения операции DSSSignatureResult
        • Сведения о ключевом контейнере DSSSigningKeyInfo
        • Политика взаимодействия с Сервисом Подписи DSSSignServerPolicy
        • Информация о загруженном на сервер документе DSSUploadDocInfo
        • Сведения о пользователе DSSUser
        • Результат серверной операции MTSignConfirmStateEnum
        • Параметры операции parameters
        • Информация о загружаемом на сервер документе UploadFile
      • Обработка ошибок
      • История изменений
    • Руководство разработчика Android
      • Аннотация
      • Классы
        • Класс CryptoProDSS
        • Класс Auth
        • Класс Cert
        • Класс Policy
        • Класс Docs
        • Класс Sign
        • Класс SigningKey
      • Типы данных
        • Запрос на подтверждение клиентской операции ApproveRequestMO
        • Запрос на подтверждение серверной операции ApproveRequestMT
        • Сведения о сертификате или запросе на сертификат Certificate
        • Причина отзыва сертификата CertRevokeReason
        • Тип ключевого контейнера CryptoKeyContainerType
        • Сведения о криптопровайдере ProviderInfo
        • Сведения об устройстве пользователя DeviceInfo
        • Сведения о документе Document
        • Сведения о ключе подписи на внешнем носителе ExternalKeyCertificateModel
        • Содержимое документа либо ссылка на документ в файловой системе NetReqResDownloadType
        • Сведения об операции Operation
        • Cписок записей аудита для определенного пользователя и устройства OperationHistory
        • Список операций для подтверждения OperationsInfo
        • Политика взаимодействия с Сервисом Подписи CaParams
        • Политика взаимодействия с сервером ParamsDss
        • Способ защиты вектора аутентификации ProtectionType
        • Информация о загруженном с сервера документе PublicDocInfo
        • Сведения о регистрируемом устройстве пользователя RegisterInfo
        • Результат выполнения операции SignatureResult
        • Сведения о ключевом контейнере SigningKeyInfo
        • Информация о загруженном на сервер документе UploadDocInfo
        • Сведения о пользователе User
        • Результат серверной операции ConfirmStateEnum
        • Параметры операции parameters
        • Информация о загружаемом на сервер документе UploadFile
        • Данные содержащиеся в QR-коде
        • Интерфейсы обратного вызова
          • BaseErrorCallback
          • SdkResultCallback
          • SdkCallback
          • SdkCertificateCallback
          • SdkDssUserCallback
          • SdkGetDocumentCallback
          • SdkInitCallback
          • SdkKeyStateCallback
          • SdkListExternalKeysCallback
          • SdkMoOperationCallback
          • SdkMoOperationWithSuspendCallback
          • SdkMtOperationCallback
          • SdkMtOperationWithSuspendCallback
          • SdkPolicyCaParamsCallback
          • SdkPolicyDeviceInfoUpdateCallback
          • SdkPolicyDevicesCallback
          • SdkPolicyOperationHistoryCallback
          • SdkPolicyOperationsInfoCallback
          • SdkPolicyParamsDssCallback
          • SdkQrCallback
          • SdkUploadDocumentCallback
          • SigningKeyCallback
      • Обработка ошибок
      • История изменений
    • Встраивание КриптоПро Ключ SDK в мобильное приложение
      • Встраивание КриптоПро Ключ SDK (iOS)
      • Встраивание КриптоПро Ключ SDK (Android)
    • Регистрация мобильного приложения
      • Общие сведения
      • Анонимная регистрация (с уникальным идентификатором)
      • Регистрация с QR-кодом
      • Регистрация при помощи привязанного устройства
    • Управление сертификатами
      • Аннотация
      • Общие сведения о работе с сертификатами
      • Обработка запроса на сертификат
    • Кастомизация SDK
      • Аннотация
      • Кастомизация SDK для iOS
      • Набор стилей SDK для iOS
    • Некоторые сценарии работы с мобильным приложением
      • Настройка частичного подтверждения операций
      • Отображение по умолчанию печатной формы документа
      • Запрет операций подписи из мобильного приложения
      • Запрет создания сертификата из мобильного приложения
      • Запрет импорта сертификата с внешнего носителя
      • Запрет самостоятельной привязки пользователем устройства к учетной записи в мобильном приложении
      • Настройка поддерживаемых типов хранения ключей
      • Настройка сложности ПИН-кода и поддержки биометрической аутентификации
      • Настройка кода подтверждения для сценария инициализации с QR-кодом
      • Настройка архивирования ключей хранимых в мобильном приложении

    Встраивание КриптоПро Ключ SDK в мобильное приложение (Android)

    Руководство по встраиванию содержит перечень действий, необходимых для встраивания КриптоПро Ключ SDK в собственное мобильное приложение.

    Инструкция предназначена для разработчиков мобильных приложений для Android версии 7 и новее. Требуется уровень Android API 24 и выше (minSdkVersion 24, targetSdkVersion 34).

    Добавление необходимых файлов в проект

    Перейдите в каталог необходимого модуля (уровень приложения). Создайте папку libs. Скопируйте в папку libs файлы:

    • SharedLibrary.aar
    • csp-gui.aar
    • JInitCSP.aar
    • dssclient-1.1.XXXX-release.aar

    В разделе dependencies файла build.gradle добавьте:

    implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
    

    В разделе android packagingOptions файла build.gradle добавьте следующее:

    packagingOptions {
        exclude 'META-INF/Digest.CP'
        exclude 'META-INF/Sign.CP'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/LICENSE.txt'
        doNotStrip "*/arm64-v8a/*.so"
        doNotStrip "*/armeabi-v7a/*.so"
        doNotStrip "*/x86_64/*.so"
        doNotStrip "*/x86/*.so"
    
        jniLibs {
            useLegacyPackaging true
        }
    }
    

    Добавьте следующие зависимости, которые используются в КриптоПро Ключ SDK:

    
    /**
    * Базовые библиотеки и библиотеки для UI
    */
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.6.1'
    implementation 'androidx.webkit:webkit:1.5.0'
    
    /**
    * Библиотеки для работы с Rest Api
    */
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:4.8.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
    implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'
    
    /**
    * Библиотеки для сериализации/десериализации в/из JSON
    */
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.2'
    implementation 'com.google.code.gson:gson:2.8.6'
    
    /**
    * Библиотека для работы с преобразованиями
    */
    implementation 'com.google.guava:guava:30.1-jre'
    
    /**
    * Библиотека для работы с QR
    */
    implementation 'com.google.mlkit:barcode-scanning:17.2.0'
    
    def camerax_version = "1.2.3"
    implementation "androidx.camera:camera-core:${camerax_version}"
    implementation "androidx.camera:camera-camera2:${camerax_version}"
    implementation "androidx.camera:camera-lifecycle:${camerax_version}"
    implementation "androidx.camera:camera-view:${camerax_version}"
    
    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
    implementation 'androidx.lifecycle:lifecycle-common-java8:2.4.1'
    
    implementation 'androidx.biometric:biometric:1.1.0'
    
    /**
    * Библиотека для работы с pdf файлами
    */
    implementation 'com.tom-roush:pdfbox-android:1.8.10.3'
    
    /**
    * Библиотека для отображения изображения, которое можно скейлить и скроллить
    */
    implementation 'com.jsibbold:zoomage:1.3.1'
    
    /**
    * Root
    */
    implementation 'com.github.scottyab:rootbeer:0.1.0'
    
    /**
    * Конфигурация CSP
    */
    implementation 'org.ini4j:ini4j:0.5.1'
    

    Поддержка Рутокен NFC

    Для встраивания Рутокен NFC необходимо добавить в зависимости библиотеку rtpcscbridge:

    implementation 'ru.rutoken.rtpcscbridge:rtpcscbridge:1.1.1'
    

    Настройка манифеста приложения

    Откройте манифест проекта AndroidManifest.xml. В манифесте в application добавить свойство extractNativeLibs=true:

    <application
        ...
        android:extractNativeLibs="true">
        ...
    </application>
    

    Настройка правил минимизации и обфускации

    Если в проекте используются инструменты минификации и обфускации proguard или D8, то для корректной работы библиотеки в файл правил proguard (например, proguard-rules.pro) необходимо добавить следующие ограничения:

    -keep public class com.digt.sdk.** { *; }
    -dontwarn com.digt.sdk.**
    -keep public class ru.CryptoPro.** { *; }
    -dontwarn ru.CryptoPro.**
    -keep public class ru.cprocsp.** { *; }
    -dontwarn ru.cprocsp.**
    -keep public class org.ini4j.spi.** { *; }
    -dontwarn org.ini4j.spi.**
    

    При отсутствии файла proguard-rules.pro в проекте его необходимо создать и добавить в конфигурацию конечной сборки в файле build.gradle:

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            proguardFiles fileTree('proguard').asList().toArray()
        }
        debug {
            minifyEnabled false
            debuggable true
        }
    }
    

    Настройка файлового провайдера

    UI SDK предоставляет возможность скачать подписываемые (обрабатываемые) документы.

    • Добавьте файл file_provider_name.xml в ресурсы вашего приложения res/xml.
    • Укажите в файле file_provider_name.xml идентификатор файлового провайдера - например your_bundle_id.fileprovider.

    Настройка корневых сертификатов

    Для выполнения защищенных сетевых запросов SDK требуется корневой сертификат, до которого строится цепочка проверки TLS-сертификата сервера. Корневой сертификат должен размещаться в ресурсах приложения.

    В ресурсы приложения добавьте файл certs.json. Формат содержимого файла:

    {
        "version":1,
        "root": [
        "MIIERDCCA/GgAwIBAgIQQ ... UJYu+Pih2ROUYAYQjPIw==",
        ...
        "MIIFUTCCBP6gAwIBAgIRA ... fYGtCrq1l5FsXZOI5c/2S"],
        "intermediate":[]
    }
    

    Инициализация SDK

    Для загрузки SDK в составе собственного приложения рекомендуется вызывать сразу после запуска или при запуске приложения следующий код:

    private fun initDss() {
        if (!CryptoProDss.isInitialized()) {
            CryptoProDss.init(requireActivity(),object : SdkCryptoProDssInitCallback{
                override fun onInitSuccess(p0: Constants.CSPInitCode?) {
    
                    // TODO: успешная инициалзиация. Можно работать с SDK
                    //viewModel.notifyInitializationEnded()
                }
    
                override fun onInitFailed(p0: Constants.CSPInitCode?) {
    
                    // TODO: произошла ошибка инициализации SDK
                    //viewModel.notifyInitializationEnded()
                }
            })
        } else {
            // TODO: SDK уже был инициализирован   
            // viewModel.notifyInitializationEnded()
        }
    }
    

    Метод инициализации SDK может отобразить экран безопасности. На экране будет отображён список предупреждений, которые могут повлиять на безопасное использование SDK. Пользователь на экране безопасности может согласиться или отказаться использовать функции SDK.

    Примечание

    Экран безопасности не будет отображен, если SDK не обнаружит угроз безопасности или пользователь на экране нажмёт кнопку "не напоминать".

    Метод init не блокирует main поток. Если метод отобразил экран безопасности, то пока пользователь не ответит на диалог SDK не вернется в callback.

    В приложении рекомендуется дождаться завершения метода init до использования других методов SDK. При попытке вызова методов неинициализированного SDK будет получена ошибка NOT_SAFE_USAGE_CANCELLED_BY_USER.

    Тестовый пример проекта

    Загрузить тестовый проект

    В начало © ООО "КРИПТО-ПРО", 2000-2024