Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро JCP, JavaTLS
»
Связь атрибутов complete-revocation-references и complete-revocation-values
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.11.2020(UTC) Сообщений: 34
Сказал(а) «Спасибо»: 14 раз Поблагодарили: 1 раз в 1 постах
|
Добрый день! Выполняю верификацию подписи CAdES X Long Type 1. При проверке из объекта ContentInfo (ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax) сред прочего извлекаются атрибуты complete-revocation-references и complete-revocation-values. В массиве references извлекаем idшники ocsp (OcspResponsesID). Вот в нём есть объект ResponderId, который должен содержать объект типа KeyHash(ru.CryptoPro.JCP.ASN.PKIXOCSP). Его значение извлекается и используется в дальнейшем для сравнения с аналогичным объектом из массива complete-revocation-values. Так вот проблема в том, что вместо KeyHash лежит объект Name (ru.CryptoPro.JCP.ASN.PKIX1Explicit88), у которого в интерфейсе нет вот этого вот хэша. Сам объект ContentInfo получается из массива байтов подписи. В скриншоте дебага видно, что уже сразу содержится объект Name. Подпись валидна, ниже на скриншоте результат проверки через cpTools. Код проекта достался в наследство, теоритически был рабочим, но гарантировать не могу. Возможно, сможете что-то подсказать, какие-нибудь идеи, в чём может быть проблема? Java: 1.8.0_211 JCP: jcp-2.0.40035 bouncycastle из дистрибутива: bcpkix-jdk15on-1.50.jar и bcprov-jdk15on-1.50.jar  verify.jpg (67kb) загружен 3 раз(а). debug-objects.jpg (138kb) загружен 4 раз(а).Отредактировано пользователем 26 ноября 2020 г. 16:58:15(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. Не очень понимаю вопрос. У ru.CryptoPro.JCP.ASN.PKIXOCSP.ResponderID в составе ANS1P.jar есть и KeyHash, и Name. Один из них обычно заполняется. В данном случае был заполнен Name. Отредактировано пользователем 26 ноября 2020 г. 20:37:16(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.11.2020(UTC) Сообщений: 34
Сказал(а) «Спасибо»: 14 раз Поблагодарили: 1 раз в 1 постах
|
Да, видимо не очень ясно описал проблему. Код достался в наследство, в нём есть функционал валидации подписи cades-xlt1. Среди прочего он сравнивает значение поля value из типа keyHash атрибута из массива complete-revocation-references с аналогичным из complete-revocation-values. Но при десериалиазции создаётся объект не KeyHash, а Name, в котором нет этого поля. Получаем экзепшн. Код:
ResultOrErrors.fromNullable(ocspIdentifier.ocspResponderID, VerificationErrorType.OCSP_REF_RESPONDER_ID_IS_EMPTY)
.nonNull(ocspResponderID -> (KeyHash) ocspResponderID.getElement(),
VerificationErrorType.OCSP_REF_RESPONDER_KEY_HASH_IS_EMPTY)
.nonEmptyByteArray(keyHash -> keyHash.value, VerificationErrorType.OCSP_REF_RESPONDER_KEY_HASH_IS_EMPTY)
.doWithResult(keyHashBytes -> rslt.responderKeySha1Bytes = keyHashBytes)
Сам созданный объект на скриншоте из дебага постом выше. Может быть можно как то настроить, экземпляр какого класса использовать? По какой логике выбирается KeyHash или Name? Вообще, может быть вам очевидней, что я делаю не правильно или что сделано не так? Отредактировано пользователем 27 ноября 2020 г. 8:29:32(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
В коде надо учитывать, что может быть как KeyHash, так и Name, т.к. в ResponderID они образуют choice. Если нет KeyHash, проверяйте по Name. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.11.2020(UTC) Сообщений: 34
Сказал(а) «Спасибо»: 14 раз Поблагодарили: 1 раз в 1 постах
|
А что именно по Name проверять? ElementName? На скриншотах ниже - объект Name и результат метода getElementName() getElementNameName
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.11.2020(UTC) Сообщений: 34
Сказал(а) «Спасибо»: 14 раз Поблагодарили: 1 раз в 1 постах
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
По идее, приводите значение getElement() => element к KeyHash или Name в зависимости от getChoiceID() у element, затем проверяете либо по-старому, по KeyHash (т.е. по хешу открытого ключа сертификата), если он есть, либо по Name - по имени сертификата (subject name). |
|
 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.11.2020(UTC) Сообщений: 34
Сказал(а) «Спасибо»: 14 раз Поблагодарили: 1 раз в 1 постах
|
Только судя по интерфейсам, метод getChoiceID() с соответствующим полем есть только у Name: Name -> Asn1Choice(здесь метод getChoiceID) -> Asn1Type KeyHash -> Asn1OctetString -> Asn1Type Наверно, стоит по типу объекта определять. Да и имени сертификата в Name нет, только набор полей субъекта. Наверно, commonName можно взять. Отредактировано пользователем 30 ноября 2020 г. 14:01:00(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
У responderid choice. Да, набор полей name надо привести к виду x509name. Отредактировано пользователем 30 ноября 2020 г. 14:10:45(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.11.2020(UTC) Сообщений: 34
Сказал(а) «Спасибо»: 14 раз Поблагодарили: 1 раз в 1 постах
|
Этот org.bouncycastle.asn1.x509.X509Name ? Но его же нет в цепочке наследования: http://prntscr.com/vssoo5Или я не понял, о чём речь.
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро JCP, JavaTLS
»
Связь атрибутов complete-revocation-references и complete-revocation-values
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close