Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.10.2013(UTC) Сообщений: 56
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 2 раз в 1 постах
|
Автор: afev У cannot validate TSA certificate должна быть причина (в стек трейсе). Возможно, она в том, что у TSA службы EKU не критический. В примере validate в классе проверки штампа вроде бы был закомментирован. xades4j.providers.CannotBuildCertificationPathException: Trust anchors KeyStore has no trusted certificate entries java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty На самом деле я просто не знаю как еще эту подпись можно проверить, вот и решил попробовать вашим верификатором .
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,954 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 701 раз в 662 постах
|
В примере XAdESExample последовательно происходит создание и проверка. Проверяется штамп с помощью класса GostTimeStampVerificationProvider. Для построения цепочки потребуется файл хранилища корневых сертификатов (xadesTrustStore - в архиве он лежит в папке data). |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.10.2013(UTC) Сообщений: 56
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 2 раз в 1 постах
|
Автор: afev В примере XAdESExample последовательно происходит создание и проверка. Проверяется штамп с помощью класса GostTimeStampVerificationProvider. Для построения цепочки потребуется файл хранилища корневых сертификатов (xadesTrustStore - в архиве он лежит в папке data). Да, разобрался. Теперь вот такое выдает: xades4j.providers.CannotBuildCertificationPathException: unable to find valid certification path to requested target sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,954 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 701 раз в 662 постах
|
Либо по CRL не удается проверить, либо не находит какой-то из сертификатов цепочки. Для проверки по CRL в примере используется: Код:
System.setProperty("com.sun.security.enableCRLDP", "true");
System.setProperty("com.ibm.security.enableCRLDP", "true");
и Код:
final CertificateValidationProvider validationProvider =
new PKIXCertificateValidationProvider(trustStore, true(!), intermediateCertsAndCRLStore);
Можно отключить проверку (false) или передать CRL в intermediateCertsAndCRLStore. Отредактировано пользователем 22 июня 2015 г. 16:30:34(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.10.2013(UTC) Сообщений: 56
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 2 раз в 1 постах
|
afev, в общем не хочет у меня работать ваш пример проверки подписи, ошибку ту же выдает.
У кого-нибудь получилось что-нибудь удачно заимпортировать на тестовый стенд ГИС ГМП, подписав импортируемую сущность примером, предложенным выше?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,954 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 701 раз в 662 постах
|
В отладке посмотрите содержимое SunCertPathBuilderException - можно узнать больше подробностей об ошибке. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.10.2013(UTC) Сообщений: 56
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 2 раз в 1 постах
|
Цитата:Можно отключить проверку (false) Когда ставлю здесь false: Код:final CertificateValidationProvider validationProvider = new PKIXCertificateValidationProvider(trustStore, false, intermediateCertsAndCRLStore);
Падает вот на этом месте: Код:
try
{
// Certificates to be used to build the certification path.
// - The other certificates from the signature (e.g. from KeyInfo).
if (otherCerts != null)
{
CollectionCertStoreParameters ccsp = new CollectionCertStoreParameters(otherCerts);
CertStore othersCertStore = CertStore.getInstance("Collection", ccsp);
builderParams.addCertStore(othersCertStore);
}
// - The external certificates/CRLs.
for (int i = 0; i < intermCertsAndCrls.length; i++)
{
builderParams.addCertStore(intermCertsAndCrls[i]);
}
builderParams.setRevocationEnabled(revocationEnabled);
builderParams.setMaxPathLength(maxPathLength);
builderParams.setDate(validationDate);
builderParams.setSigProvider(this.signatureProvider);
---->>>> builderRes = (PKIXCertPathBuilderResult) certPathBuilder.build(builderParams);
}
catch (CertPathBuilderException ex)
{
---->>>> throw new CannotBuildCertificationPathException(certSelector, ex.getMessage(), ex);
}
Где certSelector - мой сертификат. Конечный Exception - sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target. Отредактировано пользователем 23 июня 2015 г. 11:27:29(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,954 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 701 раз в 662 постах
|
Значит, не удается построить цепочку. Для какого сертификата строится цепочка? Попробуйте добавить сертификаты в intermCertsAndCrls (для отладки можно использовать GostPKIXCertificateValidationProvider). |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.10.2013(UTC) Сообщений: 56
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 2 раз в 1 постах
|
Автор: afev Значит, не удается построить цепочку. Для какого сертификата строится цепочка? Попробуйте добавить сертификаты в intermCertsAndCrls (для отладки можно использовать GostPKIXCertificateValidationProvider). Я извиняюсь за мб мою тупость, я знаю как в теории проходит проверка ЭЦП, но что там проходит внутри вашего примера не сильно догоняю). Как понять для какого сертификата строится цепочка? Вот как у меня метод проверки выглядит: Код:
// 1. Подписанный документ.
final Document verifyDocument = signedMessage.getSOAPPart().getEnvelope().getOwnerDocument();
// Узел с подписью (предположительно, один).
final NodeList nl = verifyDocument.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");
if (nl.getLength() == 0) {
throw new Exception("Cannot find Signature element");
} // if
// 2. Сертификаты.
// Хранилище корневых сертификатов.
final KeyStore trustStore = GostXAdESUtility.
loadCertStore("F:/work/GISGMPstuff/forum_xades/data/xadesTrustStore", "1".toCharArray());
final CertStore intermediateCertsAndCRLStore = CertStore.getInstance("Collection",
new CollectionCertStoreParameters(Collections.emptyList()));
final CertificateValidationProvider validationProvider = new PKIXCertificateValidationProvider(trustStore, false, intermediateCertsAndCRLStore);
final XadesVerificationProfile verProf = new XadesVerificationProfile(validationProvider)
// time-stamp validation
.withTimeStampTokenVerifier(new GostTimeStampVerificationProvider(
validationProvider, XAdESConfig.CONFIG_2001_S.getDefaultProvider()))
// digest
.withDigestEngineProvider(new DefaultMessageDigestProvider() {
@Override
public MessageDigest getEngine(String digestAlgorithmURI) throws UnsupportedAlgorithmException {
final String digestAlgOid = GostXAdESUtility.digestUri2Digest(digestAlgorithmURI);
try {
return MessageDigest.getInstance(digestAlgOid);
} catch (NoSuchAlgorithmException e) {
throw new UnsupportedAlgorithmException(e.getMessage(), digestAlgorithmURI, e);
}
}
});
// 3. Проверка подписи.
final XadesVerifier verifier = verProf.newVerifier();
final Element signatureElement = (Element) nl.item(0); // предположительно, один узел с подписью
verifier.verify(signatureElement, null);
System.out.println("Validation of XAdES-T completed.");
Подпись я создаю своим закрытым ключом и сертификатом естественно. Отредактировано пользователем 23 июня 2015 г. 11:40:29(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,954 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 701 раз в 662 постах
|
В этом посте можно узнать, какой target сертификат в builderParams? и что в this.signatureProvider? Есть ли для target сертификата необходимые сертификаты в intermCertsAndCrls и корневой в builderParams (trust anchors)? |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close