Статус: Участник
Группы: Участники
Зарегистрирован: 25.09.2014(UTC) Сообщений: 13 Сказал(а) «Спасибо»: 1 раз
|
Добрый день! У меня задача проверить входящую Cades-подпись. Использую jdk1.6.0_38, jcp.1.0.54. Во вложении - файл ResolutionBase.bin - подписываемые данные, SignatureResolutionBase.bin - сама подпись. 8CAE88BBFD404A7A53630864F9033606E1DC45E2.cer, 538AD264547716302401CDFB316B287DB12BA675.cer, AD6F1477AACD26F0CE24B2C8ED85B127D102DD1E(1).cer - вся цепочка сертификатов, все они добавлены в \jre\lib\security\cacerts как доверенные. Код: // 1. Загрузка и "проверка" подписи.
// Читаем данные из файла.
byte[] resolutionBase64 = Array.readFile(Configuration.TEST_DIR + "ResolutionBase.bin");
byte[] resolution = Base64.decode(resolutionBase64);
// Читаем подпись из файла.
byte[] cadesCmsBase64 = Array.readFile(Configuration.TEST_DIR + "SignatureResolutionBase.bin");
byte[] cadesCms = Base64.decode(cadesCmsBase64);
// Подпись в тесте была совмещенная, потому данные равны null. Предположим, что
// подписей несколько, тогда лучше указать тип null и положиться на самоопределение
// типа подписи.
CAdESSignature cadesSignature = new CAdESSignature(cadesCms, resolution, null);
Configuration.printSignatureInfo(cadesSignature);
System.setProperty("http.proxyHost", "hproxy.mmbank.ru");
System.setProperty("http.proxyPort", "9090");
System.setProperty("ru.CryptoPro.reprov.enableCRLDP", "true");
System.setProperty("com.sun.security.enableCRLDP", "true"); // для sun jvm
System.setProperty("com.ibm.security.enableCRLDP", "true"); // или ibm jvm
System.setProperty("ru.cryptopro.notThrowIfChainIsInvalid", "true");
System.setProperty("ocsp.enable", "false");
// Список CRL.
List<X509CRL> crlList = null;
// Если задан CRL, то читаем его из файла.
if (Configuration.CRL_FILENAME != null) {
X509CRL crl = (X509CRL) CertificateFactory.getInstance("X.509")
.generateCRL(new FileInputStream(Configuration.CRL_FILENAME));
crlList = Collections.singletonList(crl);
cadesSignature.verify(null, crlList);
} else {
cadesSignature.verify(null);
}
Этот код работает, но! Мне не нужно, чтобы происходило обращение к сети (а оно по факту происходит, если неверно указать прокси-хост или порт ничего не работает). Вся проверка должна быть оффлайн (в том числе и проверка в списках CRL). При попытке установить enableCRLDP в значение false падает ошибка - Код:WARNING: ERROR
java.security.cert.CertPathValidatorException: Could not determine revocation status: unable to find valid certification path to requested target
at sun.security.provider.certpath.PKIXMasterCertPathValidator.validate(PKIXMasterCertPathValidator.java:139)
at sun.security.provider.certpath.PKIXCertPathValidator.doValidate(PKIXCertPathValidator.java:330)
at sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(PKIXCertPathValidator.java:178)
at java.security.cert.CertPathValidator.validate(CertPathValidator.java:250)
at ru.CryptoPro.reprov.CPCertPathValidator.engineValidate(Unknown Source)
at java.security.cert.CertPathValidator.validate(CertPathValidator.java:250)
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)
at net.ensode.glassfishbook.EnhanceExample.werfwer(EnhanceExample.java:161)
at net.ensode.glassfishbook.EnhanceExample.main(EnhanceExample.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
at ru.CryptoPro.reprov.CrlRevocationChecker.a(Unknown Source)
at ru.CryptoPro.reprov.CrlRevocationChecker.a(Unknown Source)
at ru.CryptoPro.reprov.CrlRevocationChecker.a(Unknown Source)
at ru.CryptoPro.reprov.CrlRevocationChecker.a(Unknown Source)
at ru.CryptoPro.reprov.CrlRevocationChecker.check(Unknown Source)
at sun.security.provider.certpath.PKIXMasterCertPathValidator.validate(PKIXMasterCertPathValidator.java:117)
... 17 more
25.09.2014 12:04:29 ru.CryptoPro.CAdES.CAdESSigner a
INFO: Signer certificate chain is invalid.
25.09.2014 12:04:29 ru.CryptoPro.CAdES.exception.CAdESException <init>
SEVERE: Wrong certificate chain
Подскажите, пожалуйста, как это правильно сделать? Вложение(я): TESTS.rar (11kb) загружен 8 раз(а).Пользователь i.arsanukaev прикрепил следующие файлы: cert_path.png (70kb) загружен 29 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Здравствуйте. А CRL_FILENAME задан и он (CRL) свежий? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.09.2014(UTC) Сообщений: 13 Сказал(а) «Спасибо»: 1 раз
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
В цепочке сертификатов больше 2 сертификатов, полагаю, для промежуточных сертификатов тоже потребуются CRL. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.09.2014(UTC) Сообщений: 13 Сказал(а) «Спасибо»: 1 раз
|
Автор: afev В цепочке сертификатов больше 2 сертификатов, полагаю, для промежуточных сертификатов тоже потребуются CRL. То есть нужно скачать все CRL промежуточных сертификатов и добавить их в crlList?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Да, посмотрите ссылки CRLDP в самих сертификатах. |
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.09.2014(UTC) Сообщений: 13 Сказал(а) «Спасибо»: 1 раз
|
Автор: afev Да, посмотрите ссылки CRLDP в самих сертификатах. Огромное вам спасибо! Теперь все работает оффлайн при отключенных настройках enableCRLDP: Код: System.setProperty("ru.CryptoPro.reprov.enableCRLDP", "false");
System.setProperty("com.sun.security.enableCRLDP", "false"); // для sun jvm
System.setProperty("com.ibm.security.enableCRLDP", "false"); // или ibm jvm
Отредактировано пользователем 25 сентября 2014 г. 19:10:05(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close