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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline codegen  
#1 Оставлено : 12 января 2015 г. 13:41:40(UTC)
codegen

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

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

Сказал «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
Здравствуйте. При переходе на версию JCP 2.0 (до этого была 1.0.54), столкнулись с проблемой при проверке цепочки сертификатов.
Сама цепочка выглядит следующим образом:
1. Корневой сертификат
2. Промежуточный сертификат
3. Кросс сертификат
4. Клиентский сертификат

Проверка осуществляется следующим образом:

Код:

        System.setProperty("com.sun.security.enableCRLDP", "true");
        System.setProperty("com.ibm.security.enableCRLDP", "true");

        // Получаем все необходимые сертификаты
        CertificateFactory newfactory = CertificateFactory.getInstance("X.509");
        X509Certificate Rootcertificate = (X509Certificate) newfactory.generateCertificate(new FileInputStream("C:/dev/root.cer"));
        X509Certificate uccertificate = (X509Certificate) newfactory.generateCertificate(new FileInputStream("C:/dev/int.cer"));
        X509Certificate crosscertificate = (X509Certificate) newfactory.generateCertificate(new FileInputStream("C:/dev/cross.cer"));
        X509Certificate clientcertificate = (X509Certificate) newfactory.generateCertificate(new FileInputStream("C:/dev/client.cer"));


        final KeyStore keyStore = KeyStore.getInstance("HDImageStore");
        keyStore.load(new FileInputStream("C:/dev/newstore"), "changeit".toCharArray());

        final List<Certificate> certs = new ArrayList<Certificate>(4);
        certs.add(Rootcertificate);
        certs.add(uccertificate);
        certs.add(crosscertificate);
        certs.add(clientcertificate);


        final TrustAnchor anchor =
                new TrustAnchor((X509Certificate) Rootcertificate, null);

        final CollectionCertStoreParameters par =
                new CollectionCertStoreParameters(certs);

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

        // инициализация объекта построения цепочки сертификатов
        final CertPathBuilder cpb = CertPathBuilder.getInstance("PKIX");

        // инициализация параметров построения цепочки сертификатов
        final PKIXBuilderParameters params = new PKIXBuilderParameters(
                Collections.singleton(anchor), new X509CertSelector());

        // добавление к параметрам сертификатов, из которых
        // будет строиться цепочка
        params.addCertStore(store);

        // инициализация объекта выборки сертификата, которым
        // заканчивается построение цепочки
        final X509CertSelector selector = new X509CertSelector();

        // определение сертификата, которым
        // заканчивается построение цепочки
        selector.setCertificate((X509Certificate) clientcertificate);

        params.setTargetCertConstraints(selector);
        params.setSigProvider("JCP");
        params.setRevocationEnabled(false);
        
        // построение цепочки сертификатов
        final PKIXCertPathBuilderResult res =
                (PKIXCertPathBuilderResult) cpb.build(params);

     /* Проверка построенной цепочки сертификатов */
        params.setRevocationEnabled(true);
        // инициализация объекта проверки цепочки сертификатов
        final CertPathValidator validator = CertPathValidator.getInstance("PKIX");
        //или для совместимости с КриптоПро УЦ
        //CertPathValidator validator = CertPathValidator.getInstance("CPPKIX");

        // проверка цепочки сертификатов
        final CertPathValidatorResult val_res =
                validator.validate(res.getCertPath(), params);

        // вывод результата проверки в строком виде
        System.out.println(val_res.toString());
        


Сваливается на cpb.build:
Код:
Exception in thread "main" sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

При этом, если будем проверять не клиентский сертификат (clientcertificate), а кросс (crosscertificate) то построение проходит.
В версии 1.0.54 такой проблемы небыло.
Offline codegen  
#2 Оставлено : 12 января 2015 г. 13:53:49(UTC)
codegen

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

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

Сказал «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
В ControlPane.bat цепочка до клиентского сертификата также не проверяется. Проверяется до кросс-сертификата.
В самой системе (Windows 8) цепочка сертификатов строится до клиентского.
Offline Евгений Афанасьев  
#3 Оставлено : 12 января 2015 г. 13:57:59(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Здравствуйте. Приложите, пожалуйста, цепочку сертификатов.
Offline codegen  
#4 Оставлено : 12 января 2015 г. 14:03:28(UTC)
codegen

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

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

Сказал «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
Автор: afev Перейти к цитате
Здравствуйте. Приложите, пожалуйста, цепочку сертификатов.



Вложение(я):
tocpro.zip (7kb) загружен 13 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Евгений Афанасьев  
#5 Оставлено : 12 января 2015 г. 14:28:56(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Можете сказать, в какой строке в приложенном коде происходит ошибка?
Offline Андрей Писарев  
#6 Оставлено : 12 января 2015 г. 14:32:49(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,719
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2054 раз в 1594 постах
Могу предположить:
т.к. client.cer - содержит в себе корневой сертификат УЦ ЗАО ТаксНет ...
Пользователь Андрей * прикрепил следующие файлы:
цепочка.png (103kb) загружен 23 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Техническую поддержку оказываем тут
Наша база знаний
Offline Евгений Афанасьев  
#7 Оставлено : 12 января 2015 г. 14:38:02(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
С текущей сборкой JCP 2.0 воспроизвести не удается, строится цепочка из 3 сертификатов + 1 в trust anchor, т.е. всего 4, и проверяется. KeyStore из примера я убрал, он не используется. ControlPane не проверяет цепочку, максимум может построить, но CertStore все же предполагает хранение корневых сертификатов.

Отредактировано пользователем 12 января 2015 г. 14:39:52(UTC)  | Причина: Не указана

Offline codegen  
#8 Оставлено : 12 января 2015 г. 15:07:32(UTC)
codegen

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

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

Сказал «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
Автор: afev Перейти к цитате
Можете сказать, в какой строке в приложенном коде происходит ошибка?

54 строка
Код:
янв 12, 2015 3:48:37 PM ru.CryptoPro.JCP.tools.Starter check
INFO: Loading JCP 2.0 37985
янв 12, 2015 3:48:37 PM ru.CryptoPro.JCP.tools.Starter check
INFO: JCP loaded.
Exception in thread "main" 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 Cades.Cert.NewChainCheck(Cert.java:160)
	at Main.main(Main.java:12)


Автор: afev Перейти к цитате
С текущей сборкой JCP 2.0 воспроизвести не удается, строится цепочка из 3 сертификатов + 1 в trust anchor, т.е. всего 4, и проверяется. KeyStore из примера я убрал, он не используется. ControlPane не проверяет цепочку, максимум может построить, но CertStore все же предполагает хранение корневых сертификатов.


Обновился до сборки 2.0.37985. Версия JDK 1.7.0_51. Проблема осталась. Что еще можно посмотреть?


Offline Евгений Афанасьев  
#9 Оставлено : 12 января 2015 г. 16:44:41(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Получил вашу ошибку на 1.7.0_51.
Offline codegen  
#10 Оставлено : 12 января 2015 г. 17:04:57(UTC)
codegen

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

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

Сказал «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
Автор: afev Перейти к цитате
Получил вашу ошибку на 1.7.0_51.


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