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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline MIkhailF  
#1 Оставлено : 23 октября 2023 г. 13:37:19(UTC)
MIkhailF

Статус: Активный участник

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

Добрый день,

Есть такой код:

Код:
CAdESSignature cAdESSignature = new CAdESSignature();

cAdESSignature.addSigner(
                JCP.PROVIDER_NAME, // signature provider // провайдер подписи
                null,
                null,
                privateKey, // signing key // ключ подписанта
                chain,      // signing certificate chain // цепочка сертификатов подписанта
                CAdESType.CAdES_BES,
                null,
                false,
                null,
                null,
                null, // no CRL files
                false
        );

При запуске этого кода я получаю следующий эксепшен:
Код:
Caused by: sun.security.provider.certpath.PKIX$CertStoreTypeException: java.security.cert.CRLException: Empty input
		at sun.security.provider.certpath.URICertStore.engineGetCRLs(URICertStore.java:430) ~[?:1.8.0_212]
		at java.security.cert.CertStore.getCRLs(CertStore.java:181) ~[?:1.8.0_212]
		at sun.security.provider.certpath.DistributionPointFetcher.getCRL(DistributionPointFetcher.java:261) ~[?:1.8.0_212]
		at sun.security.provider.certpath.DistributionPointFetcher.getCRLs(DistributionPointFetcher.java:205) ~[?:1.8.0_212]
		at sun.security.provider.certpath.DistributionPointFetcher.getCRLs(DistributionPointFetcher.java:137) ~[?:1.8.0_212]
		at sun.security.provider.certpath.RevocationChecker.checkCRLs(RevocationChecker.java:579) ~[?:1.8.0_212]
		... 24 more
	Caused by: java.security.cert.CRLException: Empty input
		at sun.security.provider.X509Factory.engineGenerateCRL(X509Factory.java:397) ~[?:1.8.0_212]
		at java.security.cert.CertificateFactory.generateCRL(CertificateFactory.java:497) ~[?:1.8.0_212]
		at sun.security.provider.certpath.URICertStore.engineGetCRLs(URICertStore.java:419) ~[?:1.8.0_212]
		at java.security.cert.CertStore.getCRLs(CertStore.java:181) ~[?:1.8.0_212]
		at sun.security.provider.certpath.DistributionPointFetcher.getCRL(DistributionPointFetcher.java:261) ~[?:1.8.0_212]
		at sun.security.provider.certpath.DistributionPointFetcher.getCRLs(DistributionPointFetcher.java:205) ~[?:1.8.0_212]
		at sun.security.provider.certpath.DistributionPointFetcher.getCRLs(DistributionPointFetcher.java:137) ~[?:1.8.0_212]
		at sun.security.provider.certpath.RevocationChecker.checkCRLs(RevocationChecker.java:579) ~[?:1.8.0_212]
		... 24 more


Как эту ошибку можно исправить? Почему приходит empty input? Как я понимаю, это происходит в момент проверки сертификата. Как можно исправить эту проверку?
Заранее спасибо за любые конструктивные советы
Offline Евгений Афанасьев  
#2 Оставлено : 30 октября 2023 г. 15:29:56(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Здравствуйте.
CRL для проверки статуса сертификата могут быть как переданы в addSigner/enhance/verify, так и загружены revocation-провайдером из сети по CRL DP сертификата. В данном случае CRL скачивается, но его тело не является корректным с точки зрения X.509 CRL. Если у вас есть сертификат подписи, попробуйте скопировать из него ссылку на CRL и скачать CRL в браузере. Если нет сертификата подписи, то попробуйте включить логирование для JCPLogger, получить в логах адрес скачиваемого CRL (до ошибки) и также скачать его в браузере.
Offline MIkhailF  
#3 Оставлено : 3 ноября 2023 г. 17:25:27(UTC)
MIkhailF

Статус: Активный участник

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

По ссылке я нормально скачал этот самый crl. Проблема вот в чём. Не знаю почему, но скачиванием занимается sun.security.provider.X509Factory. Он считает, что этот crl должен завершаться 5 знаками "-",
а в реальности их нет. Поэтому этот самый X509Factory возвращает пустой массив и далее, как следствие, этот самый Empty Input.
Вопрос. Что делать в этом случае? Можно как-нибудь временно убрать этого криптопровайдера? Или что ещё можно сделать, чтобы crl нормально скачался?
Как можно подложить скачанный сертификатор в CAdesBesSignature?

С уважением,
Михаил Фуркин

Отредактировано пользователем 3 ноября 2023 г. 17:27:54(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#4 Оставлено : 3 ноября 2023 г. 18:49:52(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Все верно, скачивает некое стандартное средство (клиент) jvm. Если формат документа (CRL) не удовлетворяет требованиям (а иногда и стандарту), то такой документ не будет обработан. Скорее всего, так и происходит - неподходящий формат CRL. Можете приложить его?

Отредактировано пользователем 4 ноября 2023 г. 0:46:20(UTC)  | Причина: Не указана

Offline MIkhailF  
#5 Оставлено : 8 ноября 2023 г. 10:47:14(UTC)
MIkhailF

Статус: Активный участник

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

Crl, скачанный браузером, ниже:
crl.txt (16kb) загружен 2 раз(а).
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.