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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline i.arsanukaev  
#1 Оставлено : 25 сентября 2014 г. 12:23:09(UTC)
i.arsanukaev

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

Группы: Участники
Зарегистрирован: 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 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Online Евгений Афанасьев  
#2 Оставлено : 25 сентября 2014 г. 12:47:59(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Здравствуйте.
А CRL_FILENAME задан и он (CRL) свежий?
Offline i.arsanukaev  
#3 Оставлено : 25 сентября 2014 г. 16:20:00(UTC)
i.arsanukaev

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: afev Перейти к цитате
Здравствуйте.
А CRL_FILENAME задан и он (CRL) свежий?


Здравствуйте. Да, CRL_FILENAME задан, скачан отсюда
http://www.fssprus.ru/fi...89856c76f3679a68831d.crl
Online Евгений Афанасьев  
#4 Оставлено : 25 сентября 2014 г. 17:33:23(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
В цепочке сертификатов больше 2 сертификатов, полагаю, для промежуточных сертификатов тоже потребуются CRL.
Offline i.arsanukaev  
#5 Оставлено : 25 сентября 2014 г. 18:34:51(UTC)
i.arsanukaev

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: afev Перейти к цитате
В цепочке сертификатов больше 2 сертификатов, полагаю, для промежуточных сертификатов тоже потребуются CRL.


То есть нужно скачать все CRL промежуточных сертификатов и добавить их в crlList?
Online Евгений Афанасьев  
#6 Оставлено : 25 сентября 2014 г. 19:01:40(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Да, посмотрите ссылки CRLDP в самих сертификатах.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
i.arsanukaev оставлено 25.09.2014(UTC)
Offline i.arsanukaev  
#7 Оставлено : 25 сентября 2014 г. 19:08:05(UTC)
i.arsanukaev

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

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

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