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

Уведомление

Icon
Error

3 Страницы123>
Опции
К последнему сообщению К первому непрочитанному
Offline oleg172  
#1 Оставлено : 27 декабря 2021 г. 14:58:41(UTC)
oleg172

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

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

В рамках интеграции с ЕБС(https://bio.rt.ru/), нам необходимо проверять JWT токен.
ЕБС формирует JWT токен и подписывает его собственным сертификатом(подпись приходит в формате CAdES-T).
У нас имеется открытый ключ данного сертификата и мы хотим проверить подпись данного JWT токен.
Пример токена:
Код:

eyJraWQiOiJmOGJjOTA1MS1jNTk1LTRmNWMtOTAyMS1kNzdmMWM2YWU3NmMiLCJ0eXAiOiJKV1QiLCJhbGciOiJHT1NUMzQxMF8yMDEyXzI1NiJ9.eyJyZXN1bHQiOnRydWUsInN1YiI6IjEwMDA1MzA1NDMiLCJhdWQiOiI4NDk1MDMiLCJuYmYiOjE2NDAxNzIyNjIsImlzcyI6IlVCU19ERVYiLCJtYXRjaCI6IntcIm92ZXJhbGxcIjowLjk5OTk5OTk5OTk0NDM1MTgsXCJmYWNlXCI6MC45OTk5OTkwMjIsXCJ2b2ljZVwiOjAuOTk5OTQzMX0iLCJleHAiOjE2NDAxNzI4NjMsImlhdCI6MTY0MDE3MjI2MX0=.MIAGCSqGSIb3DQEHAqCAMIACAQExDjAMBggqhQMHAQECAgUAMIAGCSqGSIb3DQEHAQAAMYIRmTCCEZUCAQEwggFVMIIBPzEYMBYGBSqFA2QBEg0xMDI3NzAwMTk4NzY3MRowGAYIKoUDA4EDAQESDDAwNzcwNzA0OTM4ODELMAkGA1UEBhMCUlUxKTAnBgNVBAgMIDc4INCh0LDQvdC60YIt0J_QtdGC0LXRgNCx0YPRgNCzMSYwJAYDVQQHDB3QodCw0L3QutGCLdCf0LXRgtC10YDQsdGD0YDQszFYMFYGA1UECQxPMTkxMDAyLCDQsy4g0KHQsNC90LrRgi3Qn9C10YLQtdGA0LHRg9GA0LMsINGD0LsuINCU0L7RgdGC0L7QtdCy0YHQutC-0LPQviDQtC4xNTEmMCQGA1UECgwd0J_QkNCeICLQoNC-0YHRgtC10LvQtdC60L7QvCIxJTAjBgNVBAMMHNCi0LXRgdGC0L7QstGL0Lkg0KPQpiDQoNCi0JoCECuzywBErau7QFoSdvZhrpQwDAYIKoUDBwEBAgIFAKCCAfswGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAvBgkqhkiG9w0BCQQxIgQgGtqUIQI2QJaPbxl_Pjp45VmUD9vlva8MR7KpBKOcbwQwggGsBgsqhkiG9w0BCRACLzGCAZswggGXMIIBkzCCAY8wCgYIKoUDBwEBAgIEIFwkW3Ug8Xmy3XcSw7PwLqPIPQ3-aRiW3kWdrUzA2HvwMIIBXTCCAUekggFDMIIBPzEYMBYGBSqFA2QBEg0xMDI3NzAwMTk4NzY3MRowGAYIKoUDA4EDAQESDDAwNzcwNzA0OTM4ODELMAkGA1UEBhMCUlUxKTAnBgNVBAgMIDc4INCh0LDQvdC60YIt0J_QtdGC0LXRgNCx0YPRgNCzMSYwJAYDVQQHDB3QodCw0L3QutGCLdCf0LXRgtC10YDQsdGD0YDQszFYMFYGA1UECQxPMTkxMDAyLCDQsy4g0KHQsNC90LrRgi3Qn9C10YLQtdGA0LHRg9GA0LMsINGD0LsuINCU0L7RgdGC0L7QtdCy0YHQutC-0LPQviDQtC4xNTEmMCQGA1UECgwd0J_QkNCeICLQoNC-0YHRgtC10LvQtdC60L7QvCIxJTAjBgNVBAMMHNCi0LXRgdGC0L7QstGL0Lkg0KPQpiDQoNCi0JoCECuzywBErau7QFoSdvZhrpQwCgYIKoUDBwEBBgEEQJ7LnctkvvZgOcb9upoZdH1d6usWFiaDMSmAZxtk_DlIylaGJg7unmU9dah3YthlpW3gfgpE2c3p-eNJvHdxKdKhgg3aMIIN1gYLKoZIhvcNAQkQAg4xgg3FMIINwQYJKoZIhvcNAQcCoIINsjCCDa4CAQMxDjAMBggqhQMHAQECAgUAMHMGCyqGSIb3DQEJEAEEoGQEYjBgAgEBBgEpMDAwDAYIKoUDBwEBAgIFAAQgEIvgn1nKabbm1EHKmDrklHZRIif1D6-qgwkNeSAaxqkCDQovZC2OAAAAAAAJCOUYDzIwMjExMjIyMTEyNDM2WgIGAX3h4psOoIIHxzCCB8MwggdwoAMCAQICEF7ImQAfrfS_SrTwseJ23g8wCgYIKoUDBwEBAwIwggE_MRgwFgYFKoUDZAESDTEwMjc3MDAxOTg3NjcxGjAYBggqhQMDgQMBARIMMDA3NzA3MDQ5Mzg4MQswCQYDVQQGEwJSVTEpMCcGA1UECAwgNzgg0KHQsNC90LrRgi3Qn9C10YLQtdGA0LHRg9GA0LMxJjAkBgNVBAcMHdCh0LDQvdC60YIt0J_QtdGC0LXRgNCx0YPRgNCzMVgwVgYDVQQJDE8xOTEwMDIsINCzLiDQodCw0L3QutGCLdCf0LXRgtC10YDQsdGD0YDQsywg0YPQuy4g0JTQvtGB0YLQvtC10LLRgdC60L7Qs9C-INC0LjE1MSYwJAYDVQQKDB3Qn9CQ0J4gItCg0L7RgdGC0LXQu9C10LrQvtC8IjElMCMGA1UEAwwc0KLQtdGB0YLQvtCy0YvQuSDQo9CmINCg0KLQmjAeFw0yMTA1MDUwOTA5NTVaFw0yMjA1MDUwOTE5NTVaMIIBMzEbMBkGCSqGSIb3DQEJAgwMT3BlcmF0b3JfVFNQMRowGAYIKoUDA4EDAQESDDAwNzcwNzA0OTM4ODEYMBYGBSqFA2QBEg0xMDI3NzAwMTk4NzY3MSYwJAYDVQQKDB3Qn9CQ0J4gItCg0L7RgdGC0LXQu9C10LrQvtC8IjEuMCwGA1UECQwl0YPQuy4g0JTQvtGB0YLQvtC10LLRgdC60L7Qs9C-LCDQtC4xNTEmMCQGA1UEBwwd0KHQsNC90LrRgi3Qn9C10YLQtdGA0LHRg9GA0LMxKTAnBgNVBAgMIDc4INCh0LDQvdC60YIt0J_QtdGC0LXRgNCx0YPRgNCzMQswCQYDVQQGEwJSVTEmMCQGA1UEAwwd0J_QkNCeICLQoNC-0YHRgtC10LvQtdC60L7QvCIwZjAfBggqhQMHAQEBATATBgcqhQMCAiQABggqhQMHAQECAgNDAARALV1L01FLsMKw9KjwL5OD_Q37-SiRmnv208sDipcG0Yqgd7eRi65XFYlXpW5zm5x3BOcWokgNPSRm3JYsqTQTIKOCBEcwggRDMA4GA1UdDwEB_wQEAwIGwDAdBgNVHQ4EFgQUH2U-OzZ769XWdP9PyCuxvEv14UYwFgYDVR0lAQH_BAwwCgYIKwYBBQUHAwgwUwYIKwYBBQUHAQEERzBFMEMGCCsGAQUFBzAChjdodHRwOi8vY2VydGVucm9sbC50ZXN0Lmdvc3VzbHVnaS5ydS9jZHAvdGVzdF9jYV9ydGsuY2VyMB0GA1UdIAQWMBQwCAYGKoUDZHEBMAgGBiqFA2RxAjArBgNVHRAEJDAigA8yMDIxMDUwNTA5MDk1NVqBDzIwMjIwNTA1MDkwOTU1WjCCATQGBSqFA2RwBIIBKTCCASUMKyLQmtGA0LjQv9GC0L7Qn9GA0L4gQ1NQIiAo0LLQtdGA0YHQuNGPIDMuOSkMLCLQmtGA0LjQv9GC0L7Qn9GA0L4g0KPQpiIgKNCy0LXRgNGB0LjQuCAyLjApDGPQodC10YDRgtC40YTQuNC60LDRgiDRgdC-0L7RgtCy0LXRgtGB0YLQstC40Y8g0KTQodCRINCg0L7RgdGB0LjQuCDihJYg0KHQpC8xMjQtMjUzOSDQvtGCIDE1LjAxLjIwMTUMY9Ch0LXRgNGC0LjRhNC40LrQsNGCINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjRjyDQpNCh0JEg0KDQvtGB0YHQuNC4IOKEliDQodCkLzEyOC0yODgxINC-0YIgMTIuMDQuMjAxNjA2BgUqhQNkbwQtDCsi0JrRgNC40L_RgtC-0J_RgNC-IENTUCIgKNCy0LXRgNGB0LjRjyAzLjkpMGUGA1UdHwReMFwwWqBYoFaGVGh0dHA6Ly9jZXJ0ZW5yb2xsLnRlc3QuZ29zdXNsdWdpLnJ1L2NkcC80ODEwYWYwZjVkZGM5OTI0NzZmN2JmMGRkYTRiN2QwZGQ5NGNlMWY3LmNybDCCAYAGA1UdIwSCAXcwggFzgBRIEK8PXdyZJHb3vw3aS30N2Uzh96GCAUekggFDMIIBPzEYMBYGBSqFA2QBEg0xMDI3NzAwMTk4NzY3MRowGAYIKoUDA4EDAQESDDAwNzcwNzA0OTM4ODELMAkGA1UEBhMCUlUxKTAnBgNVBAgMIDc4INCh0LDQvdC60YIt0J_QtdGC0LXRgNCx0YPRgNCzMSYwJAYDVQQHDB3QodCw0L3QutGCLdCf0LXRgtC10YDQsdGD0YDQszFYMFYGA1UECQxPMTkxMDAyLCDQsy4g0KHQsNC90LrRgi3Qn9C10YLQtdGA0LHRg9GA0LMsINGD0LsuINCU0L7RgdGC0L7QtdCy0YHQutC-0LPQviDQtC4xNTEmMCQGA1UECgwd0J_QkNCeICLQoNC-0YHRgtC10LvQtdC60L7QvCIxJTAjBgNVBAMMHNCi0LXRgdGC0L7QstGL0Lkg0KPQpiDQoNCi0JqCEHILAVZQABCz6BGkaEvrr_swCgYIKoUDBwEBAwIDQQB6KnrMPAjBrZIHLxJiuphY6jtc4MG0l0EqnXdtxQurUmKc7a8VTQMJQ4df2xpzRPfbK2ahiwTvojwOYaGgd387MYIFVzCCBVMCAQEwggFVMIIBPzEYMBYGBSqFA2QBEg0xMDI3NzAwMTk4NzY3MRowGAYIKoUDA4EDAQESDDAwNzcwNzA0OTM4ODELMAkGA1UEBhMCUlUxKTAnBgNVBAgMIDc4INCh0LDQvdC60YIt0J_QtdGC0LXRgNCx0YPRgNCzMSYwJAYDVQQHDB3QodCw0L3QutGCLdCf0LXRgtC10YDQsdGD0YDQszFYMFYGA1UECQxPMTkxMDAyLCDQsy4g0KHQsNC90LrRgi3Qn9C10YLQtdGA0LHRg9GA0LMsINGD0LsuINCU0L7RgdGC0L7QtdCy0YHQutC-0LPQviDQtC4xNTEmMCQGA1UECgwd0J_QkNCeICLQoNC-0YHRgtC10LvQtdC60L7QvCIxJTAjBgNVBAMMHNCi0LXRgdGC0L7QstGL0Lkg0KPQpiDQoNCi0JoCEF7ImQAfrfS_SrTwseJ23g8wDAYIKoUDBwEBAgIFAKCCA5UwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMC8GCSqGSIb3DQEJBDEiBCCkETOD_DBo-vTbdquKNUmk5OIkydlGW5PplpT6XAyqdTCCAZQGCyqGSIb3DQEJEAIMMYIBgzCCAX8wggF7MIIBdwQULw_wwPCEUtSns2-JvJMrIB04o_YwggFdMIIBR6SCAUMwggE_MRgwFgYFKoUDZAESDTEwMjc3MDAxOTg3NjcxGjAYBggqhQMDgQMBARIMMDA3NzA3MDQ5Mzg4MQswCQYDVQQGEwJSVTEpMCcGA1UECAwgNzgg0KHQsNC90LrRgi3Qn9C10YLQtdGA0LHRg9GA0LMxJjAkBgNVBAcMHdCh0LDQvdC60YIt0J_QtdGC0LXRgNCx0YPRgNCzMVgwVgYDVQQJDE8xOTEwMDIsINCzLiDQodCw0L3QutGCLdCf0LXRgtC10YDQsdGD0YDQsywg0YPQuy4g0JTQvtGB0YLQvtC10LLRgdC60L7Qs9C-INC0LjE1MSYwJAYDVQQKDB3Qn9CQ0J4gItCg0L7RgdGC0LXQu9C10LrQvtC8IjElMCMGA1UEAwwc0KLQtdGB0YLQvtCy0YvQuSDQo9CmINCg0KLQmgIQXsiZAB-t9L9KtPCx4nbeDzCCAawGCyqGSIb3DQEJEAIvMYIBmzCCAZcwggGTMIIBjzAKBggqhQMHAQECAgQgtzokQeIdTgX-penLBljzvD-fL1vHMw-bahg9CjrsD8gwggFdMIIBR6SCAUMwggE_MRgwFgYFKoUDZAESDTEwMjc3MDAxOTg3NjcxGjAYBggqhQMDgQMBARIMMDA3NzA3MDQ5Mzg4MQswCQYDVQQGEwJSVTEpMCcGA1UECAwgNzgg0KHQsNC90LrRgi3Qn9C10YLQtdGA0LHRg9GA0LMxJjAkBgNVBAcMHdCh0LDQvdC60YIt0J_QtdGC0LXRgNCx0YPRgNCzMVgwVgYDVQQJDE8xOTEwMDIsINCzLiDQodCw0L3QutGCLdCf0LXRgtC10YDQsdGD0YDQsywg0YPQuy4g0JTQvtGB0YLQvtC10LLRgdC60L7Qs9C-INC0LjE1MSYwJAYDVQQKDB3Qn9CQ0J4gItCg0L7RgdGC0LXQu9C10LrQvtC8IjElMCMGA1UEAwwc0KLQtdGB0YLQvtCy0YvQuSDQo9CmINCg0KLQmgIQXsiZAB-t9L9KtPCx4nbeDzAMBggqhQMHAQEBAQUABEBABGYimaSvWjOPy9Pncr25B-ptxMG3O78Y7q27yLhQjAzJhgYt7xZ9maugDF3XqiJorHaftUV6Kw6TZf1csvvbAAAAAAAA

Данный токен формируется одним из двух сертификатов, что я приложил в архиве sertifikaty EBS.zip (4kb) загружен 9 раз(а).
Для валидации подписи в JWT токене мы используем следующий код(на основе примера из файла samples-sources.jar в папке CAdES файл VerifyExample.java):
Код:

boolean validate(String token, X509Certificate certificate) {
        String[] tokenParts = token.split("\\.");
        String header = tokenParts[0];
        String payload = tokenParts[1];

        String headerWithPayload = header + "." + payload;
        byte[] tokenSign = Base64.getUrlDecoder().decode(tokenParts[2]);

        try {
            CAdESSignature cAdESSignature = new CAdESSignature(tokenSign, headerWithPayload.getBytes(StandardCharsets.UTF_8), null);
            cAdESSignature.verify(Collections.singleton(certificate));
            return true;
        } catch (CAdESException e) {
            e.printStackTrace();
        }
        return false;
}

В результате выполнения данного кода нам возвращается ошибка:
Код:

Caused by: ru.CryptoPro.CAdES.exception.TimeStampValidationException: Timestamp is invalid
	at ru.CryptoPro.CAdES.CAdESSignerTImpl.d(Unknown Source) ~[CAdES-1.0.jar:41940-A]
	at ru.CryptoPro.CAdES.CAdESSignerTImpl.verify(Unknown Source) ~[CAdES-1.0.jar:41940-A]
	at ru.CryptoPro.CAdES.cl_1.verify(Unknown Source) ~[CAdES-1.0.jar:41940-A]
	at ru.CryptoPro.CAdES.cl_1.verify(Unknown Source) ~[CAdES-1.0.jar:41940-A]
	at ru.rencredit.services.crypto_pro.crypto.operation.JWTVerify.execute(JWTVerify.java:52) ~[

Подскажите в чем может ошибка? Возможно необходимо проверять подпись JWT токена по другому?
Online Андрей *  
#2 Оставлено : 29 декабря 2021 г. 1:56:15(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,672
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2043 раз в 1584 постах
Здравствуйте.

0. ..verify(Collections.singleton(certificate)); - а не нужно еще и корневой передавать, чтобы проверить сертификат TSP?

1. Хеш в CMS указан: 1ADA9421023640968F6F197F3E3A78E559940FDBE5BDAF0C47B2A904A39C6F04, сходится
2. Дата и время подписания: не указана, но есть в штампе времени (id политики... указано: 1.1 )
3. Алгоритм подписи: ГОСТ Р 34.10-2012 DH 256 бит, JWT:{"kid":"f8bc9051-c595-4f5c-9021-d77f1c6ae76c","typ":"JWT","alg":"GOST3410_2012_256"}

Snimok ehkrana ot 2021-12-29 03-10-01.png (27kb) загружен 17 раз(а).
Snimok ehkrana ot 2021-12-29 03-09-44.png (25kb) загружен 17 раз(а).
Snimok ehkrana ot 2021-12-29 03-10-51.png (41kb) загружен 18 раз(а).

Отредактировано пользователем 29 декабря 2021 г. 2:20:27(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline oleg172  
#3 Оставлено : 29 декабря 2021 г. 9:18:48(UTC)
oleg172

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

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

Андрей, то есть если мы добавим еще и корневой сертификат в verify, то проверка будет успешна?
Online Андрей *  
#4 Оставлено : 29 декабря 2021 г. 10:05:55(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,672
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2043 раз в 1584 постах
Автор: oleg172 Перейти к цитате
Андрей, то есть если мы добавим еще и корневой сертификат в verify, то проверка будет успешна?


Проверьте.
Техническую поддержку оказываем тут
Наша база знаний
Offline oleg172  
#5 Оставлено : 29 декабря 2021 г. 11:15:16(UTC)
oleg172

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

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

Проверили с рутовым сертификатом Sertifikat-dlya-proverki-shtampa-vremeni-pri-poluchenii-rasshirennogo-rezultata-verifikatsii-v-formate-CAdES_T-dlya-testovogo-kontura.zip (3kb) загружен 6 раз(а).
Ошибка точно такая же: Timestamp is invalid

Возможно подпись CADES_T нужно как то по другому проверять?
Offline Евгений Афанасьев  
#6 Оставлено : 29 декабря 2021 г. 11:27:52(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 687 раз в 648 постах
Здравствуйте.
Корневой сертификат службы штампов установлен в cacerts?
Offline oleg172  
#7 Оставлено : 29 декабря 2021 г. 12:28:11(UTC)
oleg172

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

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

Евгений, добрый день.
Мы не устанавливали корневой сертификат службы штампов в cacerts.
Корневой сертификат службы штампов - это рутовый сертификат(я прикладывал его ранее)?
Offline Евгений Афанасьев  
#8 Оставлено : 29 декабря 2021 г. 21:50:38(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 687 раз в 648 постах
Полагаю, да, корневой из архива.
Offline oleg172  
#9 Оставлено : 10 января 2022 г. 12:02:44(UTC)
oleg172

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

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

Загрузил корневой сертификат в Java\jdk-11.0.11\lib\security\cacerts (для локального тестирования), как итог имеем ту же самую ошибку:
Код:

Caused by: ru.CryptoPro.CAdES.exception.TimeStampValidationException: Timestamp is invalid
	at ru.CryptoPro.CAdES.CAdESSignerTImpl.d(Unknown Source) ~[CAdES-1.0.jar:41940-A]
	at ru.CryptoPro.CAdES.CAdESSignerTImpl.verify(Unknown Source) ~[CAdES-1.0.jar:41940-A]
	at ru.CryptoPro.CAdES.cl_1.verify(Unknown Source) ~[CAdES-1.0.jar:41940-A]
	at ru.CryptoPro.CAdES.cl_1.verify(Unknown Source) ~[CAdES-1.0.jar:41940-A]
	at ru.rencredit.services.crypto_pro.crypto.operation.JWTVerify.execute(JWTVerify.java:52) ~[

Подскажите как правильно загружать корневой сертификат в cacerts. Для локального тестирования я его загружал через программу `KeyStore Explorer`. Возможно его необходимо загружать непосредственно в коде перед выполнением проверки CAdES-T подписи?
Offline Евгений Афанасьев  
#10 Оставлено : 10 января 2022 г. 12:13:27(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 687 раз в 648 постах
Добавить можно с помощью keytool -importcert. Включите логирование https://support.cryptopr...nlirovnija-kriptopro-jcp и приложите лог.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
3 Страницы123>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.