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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline vas239  
#1 Оставлено : 27 августа 2015 г. 11:14:16(UTC)
vas239

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

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

Сказал(а) «Спасибо»: 7 раз
Здравствуйте!

Вот тут я добилась подписи в формате CAdES-BES. Теперь хочу усовершенствовать ее до CAdES-X Long Type 1. На основе примера в классе EnhanceExample. Но при попытке вызвать verify получаю ошибку.

Код:
CAdESSignature cadesSignature = new CAdESSignature(signature, file, null);
            cadesSignature.verify(chain); 


byte[] signature - подпись (detached)
byte[] file - исходный файл, который подписываю
Collection<X509Certificate> chain - цепочка сертификатов: первым в списке сертификат, которым подписываю, потом остальные сертификаты из цепочки.

Ошибка:

Код:
2015-08-27 12:12:44.041  INFO 7528 --- [nio-8083-exec-1] ru.CryptoPro.JCP.tools.JCPLogger         : Replacement of BouncyCastle GOST algorithms.
2015-08-27 12:12:44.167  INFO 7528 --- [nio-8083-exec-1] ru.CryptoPro.JCP.tools.JCPLogger         : *** Signer signature type: CAdES-BES ***
2015-08-27 12:12:44.168  INFO 7528 --- [nio-8083-exec-1] ru.CryptoPro.JCP.tools.JCPLogger         : Current signature cryptographic provider: JCP
2015-08-27 12:12:44.184  INFO 7528 --- [nio-8083-exec-1] ru.CryptoPro.JCP.tools.JCPLogger         : %%% Loading C:\java\jdk1.7.0_7\jre\lib\security\cacerts %%%
2015-08-27 12:12:44.367  INFO 7528 --- [nio-8083-exec-1] ru.CryptoPro.JCP.tools.JCPLogger         : %%% Trusted store loaded %%%
2015-08-27 12:12:44.446  INFO 7528 --- [nio-8083-exec-1] ru.CryptoPro.JCP.tools.JCPLogger         : Built chain contains next certificates: 
2015-08-27 12:12:44.447  INFO 7528 --- [nio-8083-exec-1] ru.CryptoPro.JCP.tools.JCPLogger         : [T] Chain trusted certificate 
	serial number: {number}
	subject: {данные сертификата, которым подписываю}
2015-08-27 12:12:44.448  INFO 7528 --- [nio-8083-exec-1] ru.CryptoPro.JCP.tools.JCPLogger         : Root certificate is not found into the chain. Looking for the root into cacerts...
2015-08-27 12:12:44.498  INFO 7528 --- [nio-8083-exec-1] ru.CryptoPro.JCP.tools.JCPLogger         : Verify certificate chain for target certificate
	serial number: {number}
	subject: {данные сертификата, которым подписываю}
	issuer: CN=УЦ ООО «Сертум-Про» (Qualified), OU=Служба ИТ, O=ООО «Сертум-Про», L=Екатеринбург, ST=66 Свердловская область, C=RU, EMAILADDRESS=ca@sertum-pro.ru, STREET=ул. Ульяновская д. 13А, OID.1.2.643.3.131.1.1=#120C303036363733323430333238, OID.1.2.643.100.1=#120D31313136363733303038353339
	signature provider: JCP
	PKIX validator: CPPKIX of RevCheck
	revocation enabled: false
	online: false
2015-08-27 12:12:44.506  WARN 7528 --- [nio-8083-exec-1] ru.CryptoPro.JCP.tools.JCPLogger         : ERROR

sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)
	at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
	at ru.CryptoPro.reprov.CPCertPathBuilder.engineBuild(Unknown Source)
	at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
	at ru.CryptoPro.CAdES.b.d.a.a(Unknown Source)
	at ru.CryptoPro.CAdES.b.d.a.a(Unknown Source)
	at ru.CryptoPro.CAdES.b.d.a.a(Unknown Source)
	at ru.CryptoPro.CAdES.CAdESSigner.a(Unknown Source)
	at ru.CryptoPro.CAdES.CAdESSignature.a(Unknown Source)
	at ru.CryptoPro.CAdES.CAdESSignature.verify(Unknown Source)

Отредактировано пользователем 27 августа 2015 г. 11:14:49(UTC)  | Причина: Не указана

Offline vas239  
#2 Оставлено : 28 августа 2015 г. 12:42:45(UTC)
vas239

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

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

Сказал(а) «Спасибо»: 7 раз
На тестовом сертификате подпись улучшается без ошибок. Но там нет цепочки сертификатов. Скажите, пожалуйста, в каком порядке должны идти сертификаты в цепочке?

1. Головной удостоверяющий центр
2. УЦ 1 ИС ГУЦ
3. УЦ ООО "Сертум-Про" (Qualified)
4. Мой сертификат

Я добавляю в цепочку 3 сертификата: Мой сертификат, УЦ ООО "Сертум-Про" (Qualified), УЦ 1 ИС ГУЦ. В таком порядке. Пробовала другие варианты, но все равно вылетает ошибка - unable to find valid certification path to requested target.
Offline Евгений Афанасьев  
#3 Оставлено : 28 августа 2015 г. 13:57:29(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Автор: vas239 Перейти к цитате
Скажите, пожалуйста, в каком порядке должны идти сертификаты в цепочке?

От сертификата ключа подписи до корневого.
Попробуйте составить небольшой пример для построения цепочки, как, например, тут - OCSPValidateCert в userSamples в samples-sources.jar. Без проверки, только до строк:
Код:

final PKIXCertPathBuilderResult res =
            (PKIXCertPathBuilderResult) CertPathBuilder.
                    getInstance("CPPKIX", "RevCheck").build(cpp);

то есть, фактически, просто построить цепочку.

Пример будет выглядеть примерно так:
Код:


final Certificate[] certs = new Certificate[4];
certs[0] = clientCert; // клиентский
certs[1] = subCa2Cert; // промежуточный 2
certs[2] = subCa1Cert; // промежуточный 1
certs[3] = root;       // корневой

final Set trust = new HashSet(0);
trust.add(new TrustAnchor((X509Certificate) root, null)); // <-- сюда надо положить все сертификаты из cacerts, а не root! 
// Для этого надо открыть JRE/lib/security/cacerts как KeyStore с типом JKS, перечислить все сертификаты в нем и добавить 
// в trust

final List cert = new ArrayList(0);
for (int i = 0; i < certs.length - 1; i++) // <-- все, кроме корневого. Он будет в списке trust
  cert.add(certs[i]);

final PKIXBuilderParameters cpp = new PKIXBuilderParameters(trust, null);
cpp.setSigProvider(JCP.PROVIDER_NAME);

final CollectionCertStoreParameters par = new CollectionCertStoreParameters(cert);
final CertStore store = CertStore.getInstance("Collection", par);

cpp.addCertStore(store);
final X509CertSelector selector = new X509CertSelector();
    
selector.setCertificate((X509Certificate) clientCert);
cpp.setTargetCertConstraints(selector);
   
cpp.setRevocationEnabled(false);

final PKIXCertPathBuilderResult res = (PKIXCertPathBuilderResult) 
CertPathBuilder.getInstance("CPPKIX", "RevCheck").build(cpp);
    
final CertPath cp = res.getCertPath(); // посмотреть, что здесь

Отредактировано пользователем 28 августа 2015 г. 13:58:36(UTC)  | Причина: Не указана

Offline vas239  
#4 Оставлено : 28 августа 2015 г. 15:14:23(UTC)
vas239

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

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

Сказал(а) «Спасибо»: 7 раз
Автор: afev Перейти к цитате
Автор: vas239 Перейти к цитате
Скажите, пожалуйста, в каком порядке должны идти сертификаты в цепочке?

От сертификата ключа подписи до корневого.
Попробуйте составить небольшой пример для построения цепочки, как, например, тут - OCSPValidateCert в userSamples в samples-sources.jar. Без проверки, только до строк:
Код:

final PKIXCertPathBuilderResult res =
            (PKIXCertPathBuilderResult) CertPathBuilder.
                    getInstance("CPPKIX", "RevCheck").build(cpp);

то есть, фактически, просто построить цепочку.

Пример будет выглядеть примерно так:
Код:


final Certificate[] certs = new Certificate[4];
certs[0] = clientCert; // клиентский
certs[1] = subCa2Cert; // промежуточный 2
certs[2] = subCa1Cert; // промежуточный 1
certs[3] = root;       // корневой

final Set trust = new HashSet(0);
trust.add(new TrustAnchor((X509Certificate) root, null)); // <-- сюда надо положить все сертификаты из cacerts, а не root! 
// Для этого надо открыть JRE/lib/security/cacerts как KeyStore с типом JKS, перечислить все сертификаты в нем и добавить 
// в trust

final List cert = new ArrayList(0);
for (int i = 0; i < certs.length - 1; i++) // <-- все, кроме корневого. Он будет в списке trust
  cert.add(certs[i]);

final PKIXBuilderParameters cpp = new PKIXBuilderParameters(trust, null);
cpp.setSigProvider(JCP.PROVIDER_NAME);

final CollectionCertStoreParameters par = new CollectionCertStoreParameters(cert);
final CertStore store = CertStore.getInstance("Collection", par);

cpp.addCertStore(store);
final X509CertSelector selector = new X509CertSelector();
    
selector.setCertificate((X509Certificate) clientCert);
cpp.setTargetCertConstraints(selector);
   
cpp.setRevocationEnabled(false);

final PKIXCertPathBuilderResult res = (PKIXCertPathBuilderResult) 
CertPathBuilder.getInstance("CPPKIX", "RevCheck").build(cpp);
    
final CertPath cp = res.getCertPath(); // посмотреть, что здесь


Сделала как вы сказали. В "final CertPath cp" лежит объект в котором "certs - пусто, type - X.509"

Отредактировано пользователем 28 августа 2015 г. 15:19:15(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#5 Оставлено : 28 августа 2015 г. 15:37:50(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Автор: vas239 Перейти к цитате
В "final CertPath cp" лежит объект в котором "certs - пусто, type - X.509"

Можете прикрепить весь список сертификатов к посту?
CAdES использовали из JCP 2.0 или 1.0?

Отредактировано пользователем 28 августа 2015 г. 15:38:23(UTC)  | Причина: Не указана

Offline vas239  
#6 Оставлено : 28 августа 2015 г. 15:57:20(UTC)
vas239

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

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

Сказал(а) «Спасибо»: 7 раз
Автор: afev Перейти к цитате
Автор: vas239 Перейти к цитате
В "final CertPath cp" лежит объект в котором "certs - пусто, type - X.509"

Можете прикрепить весь список сертификатов к посту?
CAdES использовали из JCP 2.0 или 1.0?


Я использую JCP 1.0.54 (CAdES оттуда же). Прикладываю цепочку Blaer.zip (5kb) загружен 5 раз(а).
Offline Евгений Афанасьев  
#7 Оставлено : 28 августа 2015 г. 16:43:31(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Автор: vas239 Перейти к цитате
Я использую JCP 1.0.54 (CAdES оттуда же).

Пробовали CAdES из JCP 2.0, как я тут упоминал? В 2.0 были доработки.

Offline vas239  
#8 Оставлено : 31 августа 2015 г. 11:04:57(UTC)
vas239

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

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

Сказал(а) «Спасибо»: 7 раз
Автор: afev Перейти к цитате
Автор: vas239 Перейти к цитате
Я использую JCP 1.0.54 (CAdES оттуда же).

Пробовали CAdES из JCP 2.0, как я тут упоминал? В 2.0 были доработки.



Я не могу использовать версию 2.0, так как она не сертифицирована.

В качестве теста перешла на версию 2.0 и попробовала составить цепочку - результат такой же: цепочка нулевой длины.

Отредактировано пользователем 31 августа 2015 г. 11:06:18(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#9 Оставлено : 31 августа 2015 г. 11:10:56(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Я попробовал CAdES из JCP 1.0.54 с вашей цепочкой (до момента подписи, т.к. нет закрытого ключа) - в JRE 1.6.0 работает (строится цепочка из 3 сертификатов + корневой). Затем в JRE 1.7.0_21 - не строится. Аналогично для CAdES из JCP 2.0 - строится везде. Цепочку нулевой длины тоже не удается получить.
Вероятно, была сделана доработка в момент (https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=8460):

Код:

2015-04-08 КриптоПро JCP 2.0.38150
...
* jcp: сделана доработка для устранения ошибки при построении цепочки с кросс-сертификатом в oracle jvm версии 7 и выше (JCP-434)
...

Отредактировано пользователем 31 августа 2015 г. 11:11:42(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
vas239 оставлено 31.08.2015(UTC)
Offline vas239  
#10 Оставлено : 2 сентября 2015 г. 12:03:53(UTC)
vas239

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

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

Сказал(а) «Спасибо»: 7 раз
Автор: afev Перейти к цитате
Я попробовал CAdES из JCP 1.0.54 с вашей цепочкой (до момента подписи, т.к. нет закрытого ключа) - в JRE 1.6.0 работает (строится цепочка из 3 сертификатов + корневой). Затем в JRE 1.7.0_21 - не строится. Аналогично для CAdES из JCP 2.0 - строится везде. Цепочку нулевой длины тоже не удается получить.
Вероятно, была сделана доработка в момент (https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=8460):

Код:

2015-04-08 КриптоПро JCP 2.0.38150
...
* jcp: сделана доработка для устранения ошибки при построении цепочки с кросс-сертификатом в oracle jvm версии 7 и выше (JCP-434)
...


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