Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.02.2015(UTC) Сообщений: 37 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Санкт-Петербург Сказал(а) «Спасибо»: 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)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.02.2015(UTC) Сообщений: 37 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Санкт-Петербург Сказал(а) «Спасибо»: 7 раз
|
На тестовом сертификате подпись улучшается без ошибок. Но там нет цепочки сертификатов. Скажите, пожалуйста, в каком порядке должны идти сертификаты в цепочке?
1. Головной удостоверяющий центр 2. УЦ 1 ИС ГУЦ 3. УЦ ООО "Сертум-Про" (Qualified) 4. Мой сертификат
Я добавляю в цепочку 3 сертификата: Мой сертификат, УЦ ООО "Сертум-Про" (Qualified), УЦ 1 ИС ГУЦ. В таком порядке. Пробовала другие варианты, но все равно вылетает ошибка - unable to find valid certification path to requested target.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Автор: vas239 ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) Скажите, пожалуйста, в каком порядке должны идти сертификаты в цепочке? От сертификата ключа подписи до корневого. Попробуйте составить небольшой пример для построения цепочки, как, например, тут - 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)
| Причина: Не указана |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.02.2015(UTC) Сообщений: 37 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Санкт-Петербург Сказал(а) «Спасибо»: 7 раз
|
Автор: afev ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) Автор: vas239 ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) Скажите, пожалуйста, в каком порядке должны идти сертификаты в цепочке? От сертификата ключа подписи до корневого. Попробуйте составить небольшой пример для построения цепочки, как, например, тут - 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)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Автор: vas239 ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) В "final CertPath cp" лежит объект в котором "certs - пусто, type - X.509" Можете прикрепить весь список сертификатов к посту? CAdES использовали из JCP 2.0 или 1.0? Отредактировано пользователем 28 августа 2015 г. 15:38:23(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.02.2015(UTC) Сообщений: 37 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Санкт-Петербург Сказал(а) «Спасибо»: 7 раз
|
Автор: afev ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) Автор: vas239 ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) В "final CertPath cp" лежит объект в котором "certs - пусто, type - X.509" Можете прикрепить весь список сертификатов к посту? CAdES использовали из JCP 2.0 или 1.0? Я использую JCP 1.0.54 (CAdES оттуда же). Прикладываю цепочку ![](/forum2/Themes/soclean/icon_file.gif) Blaer.zip (5kb) загружен 5 раз(а).
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Автор: vas239 ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) Я использую JCP 1.0.54 (CAdES оттуда же). Пробовали CAdES из JCP 2.0, как я тут упоминал? В 2.0 были доработки. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.02.2015(UTC) Сообщений: 37 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Санкт-Петербург Сказал(а) «Спасибо»: 7 раз
|
Автор: afev ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) Автор: vas239 ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) Я использую JCP 1.0.54 (CAdES оттуда же). Пробовали CAdES из JCP 2.0, как я тут упоминал? В 2.0 были доработки. Я не могу использовать версию 2.0, так как она не сертифицирована. В качестве теста перешла на версию 2.0 и попробовала составить цепочку - результат такой же: цепочка нулевой длины. Отредактировано пользователем 31 августа 2015 г. 11:06:18(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 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](/forum2/Themes/soclean/heart_small.png) 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
vas239 оставлено 31.08.2015(UTC)
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.02.2015(UTC) Сообщений: 37 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Санкт-Петербург Сказал(а) «Спасибо»: 7 раз
|
Автор: afev ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) Я попробовал 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 - все работает. Спасибо!
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close