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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline НаталияНаталия  
#1 Оставлено : 18 октября 2020 г. 6:01:36(UTC)
НаталияНаталия

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

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

Сказал(а) «Спасибо»: 4 раз
Добрый день,

используем jcp-2.0.40450-A в веб-серверном решении.

Изначально код работает:
получаем ключ:
Код:

Security.addProvider(new JCP());
Security.addProvider(new RevCheck());
String pin = "...";
KeyStore keyStore = KeyStore.getInstance("HDImageStore");
keyStore.load(null, pin.toCharArray());
		
privateKey = (PrivateKey) keyStore.getKey(alias, pin.toCharArray());
cert = (X509Certificate) keyStore.getCertificate(alias);
		
java.security.cert.Certificate[] chainArray = keyStore.getCertificateChain(alias);
chain =  Stream.of(chainArray).map(it -> (X509Certificate) it).collect(Collectors.toList());
System.setProperty("com.sun.security.enableCRLDP", "true");
System.setProperty("com.ibm.security.enableCRLDP", "true");
System.setProperty("com.sun.security.enableAIAcaIssuers", "true");


и формируем CAdES подпись:
Код:
CAdESSignature cadesSignature = new CAdESSignature(true);
cadesSignature.addSigner(JCP.PROVIDER_NAME, JCP.GOST_DIGEST_2012_256_OID,
				JCP.GOST_PARAMS_EXC_2012_256_KEY_OID, privateKey, 
				chain, 
				CAdESType.CAdES_BES, null, false, null, null, null, true);

и какое-то время все работает.

Однако через некоторое время при формировании подписи и вызове addSigner появляется ошибка:
Код:
Error building certification path for the target, <данные о сертификате>: java.security.NoSuchProviderException: no such provider: RevCheck; error codes: [33] 'PKIX failure: invalid parameters of certificate', 
	at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
	at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
	at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source)


Не подскажете, с чем связана данная ошибка?
Не находится провайдер? Или все-таки не получается построить цепочку? До некоторого времени код работает, сертификаты добавлены в трастед у cacerts, значит цепочку построить все-таки удается, почему со временем все отваливается. Пробовали и добавить провайдеры в java.security и добавлять всю цепочку в хранилище через control panel JCP.

Заранее спасибо.

Отредактировано пользователем 18 октября 2020 г. 9:05:02(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 18 октября 2020 г. 10:09:47(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте.
Ошибка сообщает, что провайдер RevCheck по каким-то причинам не найден. Обычно включение логирования (JCPLogger с уровнем FINE или FINER) может прояснить ситуацию.
В коде указанные операции добавления провайдеров:
Цитата:

Security.addProvider(new JCP());
Security.addProvider(new RevCheck());

делаются при каждом создании подписи? Или один раз в самом начале, как положено, при запуске приложения?
Тот же вопрос относительно строк:
Цитата:

System.setProperty("com.sun.security.enableCRLDP", "true");
System.setProperty("com.ibm.security.enableCRLDP", "true");
System.setProperty("com.sun.security.enableAIAcaIssuers", "true");

Это все - глобальные настройки, задавать их на каждую операцию не имеет смысла и не рекомендуется, т.к. они воздействуют на весь java-процесс.

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

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
НаталияНаталия оставлено 18.10.2020(UTC)
Offline НаталияНаталия  
#3 Оставлено : 18 октября 2020 г. 22:34:08(UTC)
НаталияНаталия

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

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

Сказал(а) «Спасибо»: 4 раз
Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.
Ошибка сообщает, что провайдер RevCheck по каким-то причинам не найден. Обычно включение логирования (JCPLogger с уровнем FINE или FINER) может прояснить ситуацию.
В коде указанные операции добавления провайдеров:
Цитата:

Security.addProvider(new JCP());
Security.addProvider(new RevCheck());

делаются при каждом создании подписи? Или один раз в самом начале, как положено, при запуске приложения?
Тот же вопрос относительно строк:
Цитата:

System.setProperty("com.sun.security.enableCRLDP", "true");
System.setProperty("com.ibm.security.enableCRLDP", "true");
System.setProperty("com.sun.security.enableAIAcaIssuers", "true");

Это все - глобальные настройки, задавать их на каждую операцию не имеет смысла и не рекомендуется, т.к. они воздействуют на весь java-процесс.


Здравствуйте, да провайдеры и проперти выставлялись один раз, тогда же и вычитывался ключ.
Ошибка воспроизвелась с нужным уровнем логирования:
Код:
 окт. 19, 2020 12:12:51 AM ru.CryptoPro.CAdES.cl_1 addSigner
FINE: %%% Adding a new signer... %%%
окт. 19, 2020 12:12:51 AM ru.CryptoPro.CAdES.cl_1 addSigner
FINE: Add the signer certificate
	serial number: 25526380130ac4d9d4fcf0cc1770c3c55
	subject:  <...>
	issuer: CN="Общество с ограниченной ответственностью \"Сертум-Про\"", O="Общество с ограниченной ответственностью \"Сертум-Про\"", STREET="улица Ульяновская, д. 13, литер А, офис 209 Б", L=Екатеринбург, ST=66 Свердловская область, C=RU, OID.1.2.643.3.131.1.1=#120C303036363733323430333238, OID.1.2.643.100.1=#120D31313136363733303038353339, EMAILADDRESS=ca@sertum.ru
окт. 19, 2020 12:12:51 AM ru.CryptoPro.CAdES.cl_1 addSigner
FINE: Building signer certificate chain...
окт. 19, 2020 12:12:51 AM ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl build
FINE: %%% Building certificate chain for certificate:
	serial number: 25526380130ac4d9d4fcf0cc1770c3c55
	subject:  <...>
	issuer: CN="Общество с ограниченной ответственностью \"Сертум-Про\"", O="Общество с ограниченной ответственностью \"Сертум-Про\"", STREET="улица Ульяновская, д. 13, литер А, офис 209 Б", L=Екатеринбург, ST=66 Свердловская область, C=RU, OID.1.2.643.3.131.1.1=#120C303036363733323430333238, OID.1.2.643.100.1=#120D31313136363733303038353339, EMAILADDRESS=ca@sertum.ru
	%%%
окт. 19, 2020 12:12:51 AM ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl build
FINE: %%% Building the certificate chain for the target certificate
	serial number: 25526380130ac4d9d4fcf0cc1770c3c55
	subject: <...>
	issuer: CN="Общество с ограниченной ответственностью \"Сертум-Про\"", O="Общество с ограниченной ответственностью \"Сертум-Про\"", STREET="улица Ульяновская, д. 13, литер А, офис 209 Б", L=Екатеринбург, ST=66 Свердловская область, C=RU, OID.1.2.643.3.131.1.1=#120C303036363733323430333238, OID.1.2.643.100.1=#120D31313136363733303038353339, EMAILADDRESS=ca@sertum.ru
	signature provider: JCP
	validation date: null
	native implementation: true
	%%%
окт. 19, 2020 12:12:51 AM ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl build
FINE: Date for building of the certificate chain:  null
окт. 19, 2020 12:12:51 AM ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl build
FINE: THROW
java.security.NoSuchProviderException: no such provider: RevCheck
	at java.base/sun.security.jca.GetInstance.getService(GetInstance.java:83)
	at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:206)
	at java.base/java.security.cert.CertPathBuilder.getInstance(CertPathBuilder.java:219)
	at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl$1CertPathBuilderWrapper.<init>(Unknown Source)
	at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
	at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
	at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source)
	

Error building certification path for the target, <данные о сертификате> : java.security.NoSuchProviderException: no such provider: RevCheck; error codes: [33] 'PKIX failure: invalid parameters of certificate', 
	at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
	at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
	at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source)


Цепочка сертификатов загружена в контейнер закрытого ключа

Отредактировано пользователем 19 октября 2020 г. 0:16:18(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#4 Оставлено : 19 октября 2020 г. 8:36:03(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Странно. А можете сделать пример для воспроизведения, проект, и приложить его?
Offline НаталияНаталия  
#5 Оставлено : 19 октября 2020 г. 14:10:44(UTC)
НаталияНаталия

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

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

Сказал(а) «Спасибо»: 4 раз
Автор: Евгений Афанасьев Перейти к цитате
Странно. А можете сделать пример для воспроизведения, проект, и приложить его?


Здравствуйте,
кажется мы локализовали проблему: она возникает на машинах разработки (где запускают веб-приложение при девелопменте) после того как тем же сертификатом, который загружен в закрытый контейнер в КриптоПро (<User_dir>\Local Settings\Application Data\Crypto Pro) и используется для подписания через JCP, пытаются подписать вручную через тонкий клиент и КриптоПро плагин. После этого серверная часть подписания начинает выдавать описанную выше ошибку, даже если перечитать закрытый ключ. Мы стали использовать для подписания на клиентской части другие сертификаты, предположительно, ошибка ушла.
Может обращение через КриптоПро плагин к сертификатам вызвать такую ошибку?
Offline НаталияНаталия  
#6 Оставлено : 19 октября 2020 г. 17:00:06(UTC)
НаталияНаталия

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

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

Сказал(а) «Спасибо»: 4 раз
Автор: НаталияНаталия Перейти к цитате

Здравствуйте,
кажется мы локализовали проблему: она возникает на машинах разработки (где запускают веб-приложение при девелопменте) после того как тем же сертификатом, который загружен в закрытый контейнер в КриптоПро (<User_dir>\Local Settings\Application Data\Crypto Pro) и используется для подписания через JCP, пытаются подписать вручную через тонкий клиент и КриптоПро плагин. После этого серверная часть подписания начинает выдавать описанную выше ошибку, даже если перечитать закрытый ключ. Мы стали использовать для подписания на клиентской части другие сертификаты, предположительно, ошибка ушла.
Может обращение через КриптоПро плагин к сертификатам вызвать такую ошибку?


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