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

Уведомление

Icon
Error

3 Страницы123>
Опции
К последнему сообщению К первому непрочитанному
Offline Илья Кузьмин  
#1 Оставлено : 31 августа 2020 г. 14:41:28(UTC)
Илья Кузьмин

Статус: Участник

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

Сказал(а) «Спасибо»: 2 раз
Здравствуйте! Уже не в первый раз встречаюсь с тем, что на андроид приложении в какой то момент что-то отваливается в криптопро. Изза этого не инициализируется ssl контекст и также вылетает получение лицензии с NPE

Цитата:
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'int ru.CryptoPro.JCP.tools.pref_store.PrefStore.getInt(java.lang.String, int)' on a null object reference
at ru.CryptoPro.ssl.android.util.TLSSettings.getDefaultSize(Unknown Source:8)
at ru.CryptoPro.ssl.android.cl_49.<init>(Unknown Source:26)
at ru.CryptoPro.ssl.android.SSLContextImpl.<init>(Unknown Source:12)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at java.security.Provider$Service.newInstance(Provider.java:1635)


Цитата:
Caused by: java.lang.IllegalStateException: CSPConfig.INSTANCE.cspProviderInfo must not be null


Можете подсказать в чем может быть проблема? Провайдеры и инфраструктура инициализируется в Application, после очищения данных приложения все становится нормально, но до поры до времени

Offline Евгений Афанасьев  
#2 Оставлено : 31 августа 2020 г. 20:49:00(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте.
Судя по ошибкам, такое возможно, если CSPConfig.init() вернул ошибку, то есть инициализация не выполнилась (часть объектов не создана), но, допустим, на ошибку не отреагировали и продолжили выполнение.
Используется провайдер внутри приложения или ACSP отдельно? Какой версии? Как используется провайдер?
Offline Илья Кузьмин  
#3 Оставлено : 1 сентября 2020 г. 9:43:06(UTC)
Илья Кузьмин

Статус: Участник

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

Сказал(а) «Спасибо»: 2 раз
Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.
Судя по ошибкам, такое возможно, если CSPConfig.init() вернул ошибку, то есть инициализация не выполнилась (часть объектов не создана), но, допустим, на ошибку не отреагировали и продолжили выполнение.
Используется провайдер внутри приложения или ACSP отдельно? Какой версии? Как используется провайдер?


Провайдер используется внутри приложения. Версия 5.0.40424.

Код такой
Цитата:

override suspend fun initInfrastructure() {
val initResult = CSPConfig.init(context)
Timber.d(mapCryptoProResponse(initResult))
}

override suspend fun initProviders() {
if (Security.getProvider(JCSP.PROVIDER_NAME) == null) {
Security.addProvider(JCSP())
}

if (Security.getProvider(Provider.PROVIDER_NAME) == null) {
Security.addProvider(Provider())
}

cpSSLConfig.setDefaultSSLProvider(JCSP.PROVIDER_NAME)
if (Security.getProvider(RevCheck.PROVIDER_NAME) == null) {
Security.addProvider(RevCheck())
}
AdESConfig.setDefaultProvider(JCSP.PROVIDER_NAME)

System.setProperty("ru.CryptoPro.CAdES.validate_tsp", "false")
System.setProperty("com.sun.security.crl.timeout", "5")
System.setProperty("ru.CryptoPro.crl.read_timeout", "5")

System.setProperty("com.sun.security.enableCRLDP", "true")
System.setProperty("com.ibm.security.enableCRLDP", "true")
System.setProperty("tls_prohibit_disabled_validation", "false")
}


Вызывается в Application onCreate()

Цитата:
try {
cryptoInitialization.initInfrastructure()
cryptoInitialization.initProviders()
} catch (ex: Exception) {
Timber.d(ex)
}
Offline Евгений Афанасьев  
#4 Оставлено : 1 сентября 2020 г. 14:57:51(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Код:

override suspend fun initInfrastructure() {
val initResult = CSPConfig.init(context)
Timber.d(mapCryptoProResponse(initResult))
}

В случае initResult != 0 (ошибка) - каково поведение приложения?
Offline Илья Кузьмин  
#5 Оставлено : 1 сентября 2020 г. 15:58:44(UTC)
Илья Кузьмин

Статус: Участник

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

Сказал(а) «Спасибо»: 2 раз
Автор: Евгений Афанасьев Перейти к цитате
Код:

override suspend fun initInfrastructure() {
val initResult = CSPConfig.init(context)
Timber.d(mapCryptoProResponse(initResult))
}

В случае initResult != 0 (ошибка) - каково поведение приложения?


продолжается инициализация провайдеров, ошибка сохраняется и выдается пользователю уже когда будет открыт главный экран
Offline Евгений Афанасьев  
#6 Оставлено : 1 сентября 2020 г. 16:46:31(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Если была ошибка инициализации, то с определенной долей вероятности может сломать загрузка JCSP. Например, в случае,
Код:

Attempt to invoke interface method 'int ru.CryptoPro.JCP.tools.pref_store.PrefStore.getInt(java.lang.String, int)' on a null object reference

не существует объект для работы с хранилищем, а он создается при TLSSettings.init() в конце CSPConfig.init(), если он успешен. Аналогично ProviderInfo.
Offline Илья Кузьмин  
#7 Оставлено : 1 сентября 2020 г. 18:24:43(UTC)
Илья Кузьмин

Статус: Участник

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

Сказал(а) «Спасибо»: 2 раз
Автор: Евгений Афанасьев Перейти к цитате
Если была ошибка инициализации, то с определенной долей вероятности может сломать загрузка JCSP. Например, в случае,
Код:

Attempt to invoke interface method 'int ru.CryptoPro.JCP.tools.pref_store.PrefStore.getInt(java.lang.String, int)' on a null object reference

не существует объект для работы с хранилищем, а он создается при TLSSettings.init() в конце CSPConfig.init(), если он успешен. Аналогично ProviderInfo.


А что можно с этим делать. Просто ситуация странная, на чистой установке все работает хорошо, но после какого-то момента происходит такая ошибка. Может я могу какие-нибудь логи собрать?
Offline Евгений Афанасьев  
#8 Оставлено : 1 сентября 2020 г. 18:37:04(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Для начала можно посмотреть, что вернула CSPConfig.init(). Допустим, выводить предупреждающее сообщение в случае ошибки CSPConfig.init() и закрывать приложение, чтобы оно не падало, а затем выяснять причины: после ошибки подключить телефон в режиме разработчика, утилитой adb из состава android sdk получить логи с ошибками, приложить тут. Возможно, нужно обновить SDK.

Отредактировано пользователем 1 сентября 2020 г. 18:41:09(UTC)  | Причина: Не указана

Offline Илья Кузьмин  
#9 Оставлено : 2 сентября 2020 г. 12:16:10(UTC)
Илья Кузьмин

Статус: Участник

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

Сказал(а) «Спасибо»: 2 раз
Автор: Евгений Афанасьев Перейти к цитате
Для начала можно посмотреть, что вернула CSPConfig.init(). Допустим, выводить предупреждающее сообщение в случае ошибки CSPConfig.init() и закрывать приложение, чтобы оно не падало, а затем выяснять причины: после ошибки подключить телефон в режиме разработчика, утилитой adb из состава android sdk получить логи с ошибками, приложить тут. Возможно, нужно обновить SDK.


По логам я вижу что после нескольких раз запуска дебаггера появляется такая ошибка
Цитата:

E/cpcsp: <cpcsp>LicWarning!CryptoPro CSP license is not set or corrupted.
E/cpcsp: <cpcsp>VerifyLicense!license not found
E/cpcsp: <cpcsp>DWORD CPCAcquireContext(HCRYPTMODULE, HCRYPTPROV *, CHAR *, DWORD, PVTABLEPROVSTRUC)!License fail cc=0x7620fcd460 hCSP=0x7660f62240
E/cpcsp: <libssp>BOOL CryptAcquireContextA(HCRYPTPROV *, LPCSTR, LPCSTR, DWORD, DWORD)!failed: LastError = 0x8009001D


Хотя как я уже говорил, эта проблема не возникает после чистой установки
Offline Евгений Афанасьев  
#10 Оставлено : 2 сентября 2020 г. 12:43:29(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Если это единственная ошибка в логе, то вопрос: лицензия валидная? Работа ломается не через 3 месяца, когда истекает срок триальной лицензии?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
3 Страницы123>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.