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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Vladislav135791111  
#1 Оставлено : 28 июля 2022 г. 13:01:38(UTC)
Vladislav135791111

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

Группы: Участники
Зарегистрирован: 28.07.2022(UTC)
Сообщений: 1
Российская Федерация
Откуда: Воронеж

Привет! Подключаем в свое приложение крипто про TLS, используем okhttp и retrofit.

вот так выглядит инициализация okhttp:
if (!TLSUtils.initCSPProviders(context)) {
Log.i(Constants.APP_LOGGER_TAG, "Couldn't initialize CSP.")
}
TLSUtils.initJavaProviders()
val trustManagers = arrayOfNulls<TrustManager>(1)
val sslContext = TLSUtils.initTLSExample(context, trustManagers)
val sslSocketFactory = sslContext.socketFactory
val trustManager = trustManagers[0] as X509TrustManager
OkHttpClient.Builder().apply {
sslSocketFactory(sslSocketFactory, trustManager)
}.build()



метод initTlsExample выглядит следующим образом:
fun initTLSExample(
context: Context,
trustManagers: Array<TrustManager?> = arrayOf()
): SSLContext {
val dataDir = context.applicationInfo.dataDir
val sslContext: SSLContext
try {
sslContext = createSSLContext(dataDir, trustManagers = trustManagers)
} catch (e: Exception) {
throw RuntimeException(e)
}
return sslContext
}


метод createSSLContext:
fun createSSLContext(
dataDir: String,
useClientAuth: Boolean = true,
trustManagers: Array<TrustManager?>
): SSLContext {
val sslCtx: SSLContext

// Используется общее для всех хранилище корневых
// сертификатов cacerts.
val trustStorePath = (dataDir +
File.separator + BKSTrustStore.STORAGE_DIRECTORY + File.separator +
BKSTrustStore.STORAGE_FILE_TRUST)
if (useClientAuth) {
sslCtx = TLSContext.initAuthClientSSL(
Provider.PROVIDER_NAME, // провайдер, по умолчанию - JTLS
"TLSv1.2", // протокол, по умолчанию - GostTLS
JCSP.PROVIDER_NAME,
Constants.keyStoreType,
Constants.CLIENT_CONTAINER_2012_256_NAME, // точный алиас ключа
BouncyCastleProvider.PROVIDER_NAME,
BKSTrustStore.STORAGE_TYPE,
FileInputStream(trustStorePath), String(BKSTrustStore.STORAGE_PASSWORD),
trustManagers
)
} else {
sslCtx = TLSContext.initClientSSL(
Provider.PROVIDER_NAME, // провайдер, по умолчанию - JTLS
"TLSv1.2", // протокол, по умолчанию - GostTLS
BouncyCastleProvider.PROVIDER_NAME,
BKSTrustStore.STORAGE_TYPE,
FileInputStream(trustStorePath), String(BKSTrustStore.STORAGE_PASSWORD),
trustManagers
)
}
return sslCtx
}

У меня возникло 2 вопроса:
1. Мы получаем ошибку в логах
ru.CryptoPro.JCSP.MSCAPI.cl_5.finalize :: Key ERROR: 0x57
java.lang.IllegalArgumentException: Key ERROR: 0x57
at ru.CryptoPro.JCSP.MSCAPI.cl_5.c(Unknown Source:169)
at ru.CryptoPro.JCSP.MSCAPI.cl_5.finalize(Unknown Source:2)
at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:291)
at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:278)
at java.lang.Daemons$Daemon.run(Daemons.java:139)
at java.lang.Thread.run(Thread.java:923)
Что это за ошибка и как ее исправить?
2. У меня нет понимания, как подключить TLS сертификат к запросам, в примере у вас на сайте видел, что сертификаты лежат в папочке root_certs, однако даже если удалить эти сертификаты, то запросы успешно отрабатывали. Буду благодарен если объясните, как это работает, или дадите ссылку на подробную документацию, где рассказано все
Offline Евгений Афанасьев  
#2 Оставлено : 28 июля 2022 г. 16:21:54(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте.
1. Скорее всего, ошибка возникает где-то раньше, а указанный стек - ее следствие. Нужно собрать более полный лог из adb logcat и приложить.
2. Сертификаты из assets при первой инициализации помещаются во впервые создаваемое хранилище доверенных корневых сертификатов BKSTrustStore.STORAGE_FILE_TRUST, которые вы используете в папке приложения security/cacers. Далее вы используете его и assets уже не нужны.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.