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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
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,963
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Здравствуйте.
Возможно, выполняется сильная обфускация кода в релизном приложении, в отличие от дебаг. Исключите из обфускации модули 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,963
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
В 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,963
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Ошибка "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,963
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Вам нужно взять 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, ибо лицензия недействительна;

А способ:

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