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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Никита Ульянов181112  
#1 Оставлено : 9 июля 2020 г. 17:26:15(UTC)
Никита Ульянов181112

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

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

Сказал(а) «Спасибо»: 3 раз
Добрый день. Проблема выглядит следующем образом:
У меня есть клиент(приложение) пока что без встроенного криптопровайдера(его нужно устанавливать как отдельный APK на смартфон), который осуществляет соединение с сервером через шлюз NGATE. Все хорошо и ровно работает(сертификат берется из ресурсов проекта, добавляется в хранилище доверенных сертификатов, идет соединение с сервером) до попыток встроить криптопровайдер в мое приложение. Сейчас в моем клиенте все библиотеки взяты из ACSPClient. Для встраивания провайдера внутрь клиента необходимо брать библиотеки и пару raw ресурсов(лицензия и тд) из ACSPInClient. Делаю по примеру из SDK(\android-csp-5.0.40714\How_to_build_android_app\sdk\How_to_build_android_app.docx). Проблема заключается в том, что после замены библиотек на библиотеки из ACSPInClient перестали загружаться сертификаты и ошибка выглядит примерно следующим образом (javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: [PKIX] a failure during check of the certificate chain). С библиотеками из ACSPClient такой проблемы нет. В коде ничего не менялось.
Offline Евгений Афанасьев  
#2 Оставлено : 10 июля 2020 г. 14:20:10(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 515 раз в 494 постах
Здравствуйте.
Возможно, отличаются cacerts (хранилище доверенных корневых сертификатов) для TLS, не хватает нужного корневого.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Никита Ульянов181112 оставлено 10.07.2020(UTC)
Offline Никита Ульянов181112  
#3 Оставлено : 10 июля 2020 г. 15:07:25(UTC)
Никита Ульянов181112

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

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

Сказал(а) «Спасибо»: 3 раз
Сертификат что там, что там берется из ресурсов приложения и добавляется в cacerts. Только вот с библиотеками из ACSPClient все идет успешно, а из ACSPInClient не добавляется ни один. Как понять отличаются cacerts?
Offline Евгений Афанасьев  
#4 Оставлено : 10 июля 2020 г. 16:00:41(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 515 раз в 494 постах
Автор: Никита Ульянов181112 Перейти к цитате
Сертификат что там, что там берется из ресурсов приложения и добавляется в cacerts. Только вот с библиотеками из ACSPClient все идет успешно, а из ACSPInClient не добавляется ни один. Как понять отличаются cacerts?

Частая ошибка - в trust store кладут сертификат сервера, а не КОРНЕВОЙ сертификат из цепочки сервера.
Проверить можно, пожалуй, только зайдя, например, через adb shell и выкачав (adb pull) из папки security/cacerts (в папке приложения) у каждого из приложений (работающего и неработающего) после того, как убедитесь, что одно успешно отработало, а второе - не работает.
Еще можно приложить лог из adb logcat, предварительно включив логирование:
adb shell setprop log.tag.JCP DEBUG
Для выключения лога выполнить:
adb shell setprop log.tag.JCP INFO

Отредактировано пользователем 10 июля 2020 г. 16:03:30(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Никита Ульянов181112 оставлено 21.07.2020(UTC)
Offline Никита Ульянов181112  
#5 Оставлено : 21 июля 2020 г. 14:37:21(UTC)
Никита Ульянов181112

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

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

Сказал(а) «Спасибо»: 3 раз
Спасибо за оперативный ответ! Извиняюсь за долгий ответ вам. Проблема непонятных логов(в которых не загружались сертификаты) заключалась в эмуляторе. На реальном устройстве приложение со встроенным провайдером связывается с сервером и происходит хендшейк, но вот мой корневой сертификат так и не добавляется, ругается на кривой путь до хранилища. В хранилище уже есть пару сертификатов(видимо они уже дефолтно есть в cacerts), но вот мой сертификат из ресурсов приложения(raw ресурсы) не добавляется. Для наглядности привожу полный список логов ссылкой на pastebin:
https://pastebin.com/YpznfU4E


Offline Евгений Афанасьев  
#6 Оставлено : 21 июля 2020 г. 15:47:48(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 515 раз в 494 постах
А как вы добавляете сертификат?
Нет корневого с издателем "nGate Management Console" в доверенных, цепочка сервера не может быть построена.

Отредактировано пользователем 21 июля 2020 г. 15:51:44(UTC)  | Причина: Не указана

Offline Никита Ульянов181112  
#7 Оставлено : 21 июля 2020 г. 16:06:13(UTC)
Никита Ульянов181112

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

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

Сказал(а) «Спасибо»: 3 раз
Я добавляю из ресурсов приложения. Вот кусок кода:
trustStreamForTsp = context.getResources().openRawResource(R.raw.root);
loadCert(trustStreamForTsp);
Сам метод loadCert:
private void loadCert(InputStream trustStream) throws Exception {

try {

final CertificateFactory factory = CertificateFactory.getInstance("X.509");

trustCerts.add((X509Certificate) factory.generateCertificate(trustStream));
} finally {

if (trustStream != null) {

try {
trustStream.close();
} catch (IOException e) {
;
}

} // if

}

}
UPD: Добавился мой сертификат в список, но цепочка все равно не хочет строиться(мой сертификат предпоследний):


2020-07-21 15:08:29.898 28264-28321/com.example.testlake D/JCP: ru.CryptoPro.ssl.android.cl_66.a ::
%% adding as trusted certificates %%
--------
Subject: CN=CryptoPro VPN CA, O=Crypto-Pro Ltd., L=Moscow, C=RU, EMAILADDRESS=vpnca@cryptopro.ru
Serial number: 3ddff7917a4f67814e346f510129da7d
Valid from Mon Sep 19 10:44:26 GMT+02:00 2011 until Sat Sep 19 09:54:24 GMT+02:00 2026
--------
Subject: CN="Тестовый УЦ ООО \"КРИПТО-ПРО\"", O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=г. Москва, C=RU, STREET=ул. Сущёвский вал д. 18, OID.1.2.643.3.131.1.1=#120C303031323334353637383930, OID.1.2.643.100.1=#120D31323334353637383930313233
Serial number: 3b208ae5fd46688649a050faafa88393
Valid from Wed Sep 12 12:19:30 GMT+02:00 2018 until Tue Sep 12 12:28:55 GMT+02:00 2023
--------
Subject: CN=Минкомсвязь России, OID.1.2.643.3.131.1.1=#120C303037373130343734333735, OID.1.2.643.100.1=#120D31303437373032303236373031, O=Минкомсвязь России, STREET="улица Тверская, дом 7", L=г. Москва, ST=77 Москва, C=RU, EMAILADDRESS=dit@minsvyaz.ru
Serial number: 4e6d478b26f27d657f768e025ce3d393
Valid from Fri Jul 06 14:18:06 GMT+02:00 2018 until Tue Jul 01 14:18:06 GMT+02:00 2036
--------
Subject: CN=CRYPTO-PRO Test Center 2, O=CRYPTO-PRO LLC, L=Moscow, C=RU, EMAILADDRESS=support@cryptopro.ru
Serial number: 37418882f539a5924ad44e3de002ea3c
Valid from Mon May 27 09:24:26 GMT+02:00 2019 until Sun May 26 09:34:05 GMT+02:00 2024
--------
Subject: CN=УЦ KPИПTO-ПPO, O=ООО КРИПТО-ПРО, L=Москва, C=RU, EMAILADDRESS=cpca@cryptopro.ru
Serial number: 3d755a8f8468798f4fa0c0218929d594
Valid from Fri Nov 11 10:11:11 GMT+02:00 2011 until Sun Nov 10 09:21:11 GMT+02:00 2041
--------
Subject: CN=CryptoPro VPN CA, O=Crypto-Pro Ltd., L=Moscow, C=RU, EMAILADDRESS=vpnca@cryptopro.ru
Serial number: 6e4e5ed4a6de41ba4b1eebc491f4e22e
Valid from Tue May 05 14:31:05 GMT+02:00 2015 until Sun May 05 14:41:03 GMT+02:00 2030
--------
Subject: CN=CryptoPro GOST Root CA, O="LLC \"Crypto-Pro\"", L=Moscow, ST=Moscow, C=RU, OID.1.2.643.3.131.1.1=#120C303037373137313037393931, OID.1.2.643.100.1=#120D31303337373030303835343434
Serial number: 4056ed0099a9d6af49c9ff98b9c70e70
Valid from Thu Nov 15 16:14:09 GMT+02:00 2018 until Tue Nov 15 16:14:09 GMT+02:00 2033
--------
Subject: CN=УЦ КРИПТО-ПРО (ГОСТ 2012), O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=Москва, C=RU, EMAILADDRESS=cpca@cryptopro.ru
Serial number: 1e3fbf60031a9579540ca4145db0c179c
Valid from Fri Aug 03 16:49:15 GMT+02:00 2018 until Wed Aug 03 16:49:15 GMT+02:00 2033
--------
Subject: CN=УЦ KPИПTO-ПPO, O=ООО КРИПТО-ПРО, L=Москва, C=RU, EMAILADDRESS=cpca@cryptopro.ru
Serial number: 6a7c887538f2cd8b4126ff8e40c3ddba
Valid from Wed Sep 09 17:01:35 GMT+02:00 2015 until Mon Sep 09 17:01:35 GMT+02:00 2030
--------
Subject: CN=Головной удостоверяющий центр, OID.1.2.643.3.131.1.1=#120C303037373130343734333735, OID.1.2.643.100.1=#120D31303437373032303236373031, O=Минкомсвязь России, STREET="125375 г. Москва, ул. Тверская, д. 7", L=Москва, ST=77 г. Москва, C=RU, EMAILADDRESS=dit@minsvyaz.ru
Serial number: 34681e40cb41ef33a9a0b7c876929a29
Valid from Fri Jul 20 15:31:14 GMT+02:00 2012 until Sat Jul 17 14:31:14 GMT+02:00 2027
--------
Subject: OU=nGate MC Certificate Authority, O=whitelake, C=RU, CN=nGate Management Console
Serial number: -504dd3334460d11da29f484
Valid from Tue Apr 14 01:06:07 GMT+02:00 2020 until Fri Apr 14 01:06:07 GMT+02:00 2023
--------
Subject: CN="ООО \"КРИПТО-ПРО\"", O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=г. Москва, C=RU, EMAILADDRESS=qca@cryptopro.ru, STREET=ул. Сущёвский вал д. 18, OID.1.2.643.3.131.1.1=#120C303037373137313037393931, OID.1.2.643.100.1=#120D31303337373030303835343434
Serial number: 3e6559a570ee6fbb419c7c05ae13c293
Valid from Wed Feb 04 10:33:34 GMT+02:00


Ошибка выглядит следующим образом:

2020-07-21 15:08:33.338 28264-28321/com.example.testlake W/JCP: ru.CryptoPro.ssl.android.cl_62.a :: unable to find valid certification path to requested target
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Отредактировано пользователем 21 июля 2020 г. 16:11:35(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#8 Оставлено : 21 июля 2020 г. 16:46:05(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 515 раз в 494 постах
Можете приложить тут корневой в виде файла или base64, который добавляете? nGate Management Console
Offline Никита Ульянов181112  
#9 Оставлено : 21 июля 2020 г. 17:15:56(UTC)
Никита Ульянов181112

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

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

Сказал(а) «Спасибо»: 3 раз
Не разрешает в формате .cer прикладывать файлы

Offline Никита Ульянов181112  
#10 Оставлено : 22 июля 2020 г. 12:08:37(UTC)
Никита Ульянов181112

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

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

Сказал(а) «Спасибо»: 3 раз
Вот мой сертификат:

-----BEGIN CERTIFICATE-----
MIICvjCCAmugAwIBAgIMzvMqXRK0epvW62U2MAoGCCqFAwcBAQMCMG0xITAfBgNV
BAMMGG5HYXRlIE1hbmFnZW1lbnQgQ29uc29sZTELMAkGA1UEBhMCUlUxEjAQBgNV
BAoMCXdoaXRlbGFrZTEnMCUGA1UECwwebkdhdGUgTUMgQ2VydGlmaWNhdGUgQXV0
aG9yaXR5MB4XDTIwMDQxNDE1MTczMloXDTIzMDQxNDE1MTczMlowbTEhMB8GA1UE
AwwYbkdhdGUgTWFuYWdlbWVudCBDb25zb2xlMQswCQYDVQQGEwJSVTESMBAGA1UE
CgwJd2hpdGVsYWtlMScwJQYDVQQLDB5uR2F0ZSBNQyBDZXJ0aWZpY2F0ZSBBdXRo
b3JpdHkwZjAfBggqhQMHAQEBATATBgcqhQMCAiQABggqhQMHAQECAgNDAARA3r45
HHOsYMHUVsbdtxWAhTz0ujqzwmegW73q8EpSmc8GWUmMlW+Lr96sxLDU8GsXjBZ7
EHjSOILEeCpOXW6qAqOB4zCB4DAdBgNVHQ4EFgQUNNnnNBat0RLROU8SKVZNdyF6
AWAwDwYDVR0TBAgwBgEB/wIBATCBoAYDVR0BBIGYMIGVgBQ02ec0Fq3REtE5TxIp
Vk13IXoBYIFvMG0xITAfBgNVBAMMGG5HYXRlIE1hbmFnZW1lbnQgQ29uc29sZTEL
MAkGA1UEBhMCUlUxEjAQBgNVBAoMCXdoaXRlbGFrZTEnMCUGA1UECwwebkdhdGUg
TUMgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ggzO8ypdErR6m9brZTYwCwYDVR0PBAQD
AgGuMAoGCCqFAwcBAQMCA0EAWKR/LgNTnrzoBBy94puZLfNY1pC/BEf2ZPmnrV+j
F4EiPmaLcv8KS6K5DDFKbvomCQx2WujHJ8R1CluId/sT9g==
-----END CERTIFICATE-----


Также вот кусок кода отвечающий за создание trustCerts:

public void saveTrustCertAll() throws Exception {

int i = 0;
for (X509Certificate trustCert : trustCerts) {
saveTrustCert(trustStoreFile, trustCert);
i++;
} // for

}
Offline Евгений Афанасьев  
#11 Оставлено : 22 июля 2020 г. 22:38:59(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 515 раз в 494 постах
По ссылке https://pastebin.com/YpznfU4E я среди добавленных в начале корневых не нашел по слову nGate или Console корневого типа того, что вы выше приложили. То есть в том логе по ссылке его нет.
Затем вы приложили кусок лога с добавлением корневого, появились строки:
Код:

Subject: OU=nGate MC Certificate Authority, O=whitelake, C=RU, CN=nGate Management Console
Serial number: -504dd3334460d11da29f484
Valid from Tue Apr 14 01:06:07 GMT+02:00 2020 until Fri Apr 14 01:06:07 GMT+02:00 2023


Срок корневого сертификата из лога:
Код:

Valid from Tue Apr 14 01:06:07 GMT+02:00 2020 until Fri Apr 14 01:06:07 GMT+02:00 2023


В последнем сообщении вы приложили корневой сертификат, в нем время:
Код:

‎14 ‎апреля ‎2020 ‎г. 18:17:32
‎14 ‎апреля ‎2023 ‎г. 18:17:32


Если брать во внимание время, то как будто не тот корневой. Может, перевыпускали несколько штук?

Отредактировано пользователем 22 июля 2020 г. 22:47:08(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Никита Ульянов181112 оставлено 23.07.2020(UTC)
Offline Никита Ульянов181112  
#12 Оставлено : 23 июля 2020 г. 17:43:27(UTC)
Никита Ульянов181112

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

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

Сказал(а) «Спасибо»: 3 раз
Спасибо большое за советы и помощь) Проблема решена путем добавления нужного сертификата(переписал строчку кода которая достает нужный сертификат из ресурсов): trustStreamForTsp = context.getResources().openRawResource(R.raw.root);
Также переписал параметр TLSSettings.setDefaultEnableRevocation(false); из OnCreate в сам метод initProviders, так как приложение вылетало. На данный момент все работает и пока что сбоев нет. Спасибо большое еще раз!Dancing

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