Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline baboshin  
#1 Оставлено : 11 августа 2021 г. 13:16:07(UTC)
baboshin

Статус: Новичок

Группы: Участники
Зарегистрирован: 31.07.2020(UTC)
Сообщений: 9

Добрый день. В debug режиме все работает как часы. Собрал релизную сборку и тестирую на телефоне, криптопровайдер вызывает краш всего приложения, предположительно на вызове Security.addProvider(new JCSP())

Версия CSP - 4.0
minSdkVersion 24
Gradle 6.7
В androidManifest прописано <application android:extractNativeLibs="true"></application>
В gradle.properties android.bundle.enableUncompressedNativeLibs = false

Тестирую релизную сборку на телефоне с Android 11

build.gradle


Ошибка


В чем может быть проблема? Спасибо
Offline Евгений Афанасьев  
#2 Оставлено : 11 августа 2021 г. 17:17:43(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,540
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 596 раз в 566 постах
Здравствуйте.
Возможно, выполняется сильная обфускация кода в релизном приложении, в отличие от дебаг. Исключите из обфускации модули SDK.
Offline baboshin  
#3 Оставлено : 11 августа 2021 г. 18:34:37(UTC)
baboshin

Статус: Новичок

Группы: Участники
Зарегистрирован: 31.07.2020(UTC)
Сообщений: 9

Отключил обфускацию для конкретного класса, который ищется через рефлексию и провайдер инициализировался, спасибо! (-keep public class ru.CryptoPro.JCSP.CSPInternalConfig)

Однако, возникла другая проблема. Запускаю один и тот же код под дебагом на эмуляторе и телефоне с одним и тем же .pfx контейнером.
Ищу среди алисов контейнер с приватным ключом. На эмуляторе все прекрасно работает, но на телефоне alias остается null, т.к условие
Код:
if (keyStorePFX.isKeyEntry(aliasPFX))
не выполняется ни разу.
В лог выводятся одинаковые алиасы (первый идет крипто про, потом мой)
Если на телефоне убираю условие
Код:
if (keyStorePFX.isKeyEntry(aliasPFX))
и иду дальше на подписание, то появляется ошибка о том, что невозможно получить алгоритм приватного ключа


Offline Евгений Афанасьев  
#4 Оставлено : 11 августа 2021 г. 18:59:56(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,540
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 596 раз в 566 постах
В logcat есть какие-нибудь ошибки? Если явных ошибок нет, то включите логирование так: adb shell setprop log.tag.JCP VERBOSE и проверьте, есть ли теперь логи в logcat. Если нет, то попробуйте так: adb shell setprop log.tag.JCP DEBUG
Offline baboshin  
#5 Оставлено : 13 августа 2021 г. 17:08:40(UTC)
baboshin

Статус: Новичок

Группы: Участники
Зарегистрирован: 31.07.2020(UTC)
Сообщений: 9

Явных ошибок в логе не увидел.

Ошибка, если без проверки на isKeyEntry выполнить
Код:
PrivateKey privateKey = (PrivateKey) keyStorePFX.getKey(alias, password.toCharArray()); 
signature.initSign(privateKey);





Инициализация криптопровайдера на эмуляторе
initEMULATOR.txt (3kb) загружен 3 раз(а).
Инициализация криптопровайдера на телефоне
initDevice.txt (31kb) загружен 2 раз(а).
Установка контейнера на эмуляторе
installEmulator.txt (3kb) загружен 3 раз(а).
Установка контейнера на телефоне
installDevice.txt (9kb) загружен 7 раз(а).

Спасибо за помощь
Offline Евгений Афанасьев  
#6 Оставлено : 13 августа 2021 г. 17:16:53(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,540
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 596 раз в 566 постах
Ошибка "java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String java.security.PrivateKey.getAlgorithm()' on a null object reference" закономерна - ведь Key == null после чтения.
Полезные логи в последнем приложенном файле, сверху ошибки.
Какая у вас версия CSP SDK?
Offline baboshin  
#7 Оставлено : 13 августа 2021 г. 17:28:21(UTC)
baboshin

Статус: Новичок

Группы: Участники
Зарегистрирован: 31.07.2020(UTC)
Сообщений: 9

Версия CSP 4, а вот номер ревизии не могу вспомнить и не вижу где его посмотреть
Offline Евгений Афанасьев  
#8 Оставлено : 13 августа 2021 г. 17:32:50(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,540
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 596 раз в 566 постах
Вам нужно взять https://www.cryptopro.ru...ndroid-csp-5.0.42506.zip - с момента использования CSP 4.0 в Android произошло много изменений.
Ссылка на документацию: https://docs.cryptopro.ru/android/
Offline baboshin  
#9 Оставлено : 13 августа 2021 г. 17:38:16(UTC)
baboshin

Статус: Новичок

Группы: Участники
Зарегистрирован: 31.07.2020(UTC)
Сообщений: 9

Логи установки сертификата на эмулятор были не все
installEmulator2.txt (10kb) загружен 3 раз(а).
Вот теперь четко я вижу, что на эмуляторе загружается приватный ключ (Loading the private key...), а на телефоне нет(Adding certificate only.)

Попробую установить 5ую версию CSP, хорошо
Offline baboshin  
#10 Оставлено : 22 августа 2021 г. 19:12:30(UTC)
baboshin

Статус: Новичок

Группы: Участники
Зарегистрирован: 31.07.2020(UTC)
Сообщений: 9

Обновился на 5ую версию, все заработало, спасибо!

Есть еще вопрос
Как ввести лицензию до инициализации провайдера?

Метод из примера:

не работает, т.к CSPProviderInterface инициализируется в CSPConfig.init после проверки лицензии, на которой он делает return, ибо лицензия недействительна;

А способ:

требует перезагрузки приложения, что не очень приятно.
Offline Евгений Афанасьев  
#11 Оставлено : 22 августа 2021 г. 19:33:08(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,540
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 596 раз в 566 постах
Да нет, не должно быть так в последней версии. CSpConfig.init может вернуть ошибку про лицензию, если с ней что-то совсем не так (с просроченной лицензией можно работать). Да и в license.ini в SharedLibrary.aar находится рабочая трехмесячная триальная лицензия. Кроме того, после ввода новая лицензия должна была подхватиться. Может, у вас остался старый license.ini с лицензией CSP 4.0? Попробуйте очистить кэш приложения.
Offline baboshin  
#12 Оставлено : 22 августа 2021 г. 20:38:23(UTC)
baboshin

Статус: Новичок

Группы: Участники
Зарегистрирован: 31.07.2020(UTC)
Сообщений: 9

Понял
Я просто думал, что CSPConfig.init вернет ошибку, если лицензия просрочена (никак не протестировать было, за неимение просроченного ключа).
Тогда все работает, спасибо
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.