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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline MEPPO  
#1 Оставлено : 19 октября 2023 г. 5:43:15(UTC)
MEPPO

Статус: Новичок

Группы: Участники
Зарегистрирован: 25.08.2023(UTC)
Сообщений: 8
Откуда: Кемерово

Сказал(а) «Спасибо»: 1 раз
Здравствуйте, пытаюсь получить цепочку сертификатов для создания подписи xml в формате XADES-BES. JCP не видит цепочку сертификатов поэтому загружает только один сертификат, а вот CSP видит их. Я с помощью CSP выгрузил недостающие сертификаты и добавил их в хранилище сертификатов в JCP и при нажатии построить он строит цепочку но не сохранят ее. если я правильно понял из того что читал на форуме в samples-sours.jar есть классы (примеры) загрузки всей цепочки сертификатов, я их искал но не нашел эти примеры. Подскажите пожалуйста как получить всю цепочку сертификатов с помощью JCP как и куда копать.

На данный момент получаю сертификат с помощью данного кода!

Код:
 Certificate[] chain = ks.getCertificateChain(alias);
            List<X509Certificate> certificateList = new ArrayList<>();

            for (Certificate cert : chain) {
                if (cert instanceof X509Certificate) {
                    certificateList.add((X509Certificate) cert);
                }
            }

и метод xAdESSignature.addSigner выдает такую ошибку Certificate chain is null; error codes: [2] 'Certificate chain is null'(Цепочка сертификатов равна нулю; коды ошибок: [2] «Цепочка сертификатов равна нулю»).
Offline Евгений Афанасьев  
#2 Оставлено : 30 октября 2023 г. 15:34:19(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Здравствуйте.
При какой операции получаете описанную ошибку 2?
getCertificateChain извлекает сертификаты из ключевого контейнера, но ничего не строит. Либо в ключевом контейнере должна быть цепочка сертификатов (ее туда можно установить, например, с помощью setEntry), либо недостающие сертификаты можно подать в метод addSigner/enhance/verify наравне с сертификатом подписи, который был получен из getCertificateChain.
Offline MEPPO  
#3 Оставлено : 31 октября 2023 г. 5:11:09(UTC)
MEPPO

Статус: Новичок

Группы: Участники
Зарегистрирован: 25.08.2023(UTC)
Сообщений: 8
Откуда: Кемерово

Сказал(а) «Спасибо»: 1 раз
Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.
При какой операции получаете описанную ошибку 2?
getCertificateChain извлекает сертификаты из ключевого контейнера, но ничего не строит. Либо в ключевом контейнере должна быть цепочка сертификатов (ее туда можно установить, например, с помощью setEntry), либо недостающие сертификаты можно подать в метод addSigner/enhance/verify наравне с сертификатом подписи, который был получен из getCertificateChain.


Здравствуйте, данную ошибку я получаю при вызове метода
Код:
xAdESSignature.addSigner
я не совсем понимаю как построить цепочку сертификатов. как вы сказали я передаю все сертификаты в chain и дальше в функцию но ничего не меняется, недостающие сертификаты я получаю из файлов. все сертификаты добавил cacerts, но он все-равно не строит цепочку. Если функция addSigner сама проверяет сертификаты то что я делаю не так?
вот новый код

Код:
String subscriberCertPath = PATH + "CA.cer";

        // Путь к файлу промежуточных сертификатов
        String intermediateCertsPath = PATH + "FNS.cer";
        Security.addProvider(new JCP());
        Security.addProvider(new BouncyCastleProvider());
        Security.addProvider(new RevCheck());
        System.setProperty("com.sun.security.enableCRLDP", "true");
        System.setProperty("com.ibm.security.enableCRLDP", "true");
        String aliasPK = "2816";
        String alias = "530532ed-341e-4494-9656-0cc177e968e7 копия";
        char[] password = "12345678".toCharArray();





        KeyStore ks = KeyStore.getInstance("FloppyStore", "JCP");
        ks.load(null, null);
        //ks.load(new FileInputStream(System.getProperty("cryptopro.trustStore")), "changeit".toCharArray());
        PrivateKey privateKey = (PrivateKey) ks.getKey(alias, password);
        final X509Certificate certificate = (X509Certificate) ks.getCertificate(alias);
       // KeyStore keyStore = KeyStore.store(new FileOutputStream(fileName), "changeit".toCharArray());
        // Создание объекта CertificateFactory
        CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
        // Загрузка сертификата подписчика
        FileInputStream subscriberCertFile = new FileInputStream(subscriberCertPath);
        X509Certificate subscriberCert = (X509Certificate) certFactory.generateCertificate(subscriberCertFile);
        FileInputStream intermediateCertsFile = new FileInputStream(intermediateCertsPath);
        List<X509Certificate> intermediateCerts = new ArrayList<>();
        while (intermediateCertsFile.available() > 0) {
            X509Certificate cert = (X509Certificate) certFactory.generateCertificate(intermediateCertsFile);
            intermediateCerts.add(cert);
        }
        List<X509Certificate> chain = new ArrayList<>();
        chain.add(subscriberCert);
        chain.addAll(intermediateCerts);
        chain.add(certificate);
        for (X509Certificate cert : chain) {
            System.out.println(cert);
        }
        subscriberCertFile.close();
        intermediateCertsFile.close();

        XAdESSignature xAdESSignature = new XAdESSignature();
        xAdESSignature.addSigner(JCP.PROVIDER_NAME, null, privateKey, chain, XAdESType.XAdES_BES, null);

Offline Евгений Афанасьев  
#4 Оставлено : 1 ноября 2023 г. 19:52:00(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Можете привести полный стек ошибки?
Offline MEPPO  
#5 Оставлено : 3 ноября 2023 г. 11:45:34(UTC)
MEPPO

Статус: Новичок

Группы: Участники
Зарегистрирован: 25.08.2023(UTC)
Сообщений: 8
Откуда: Кемерово

Сказал(а) «Спасибо»: 1 раз
Автор: Евгений Афанасьев Перейти к цитате
Можете привести полный стек ошибки?


Exception in thread "main" Private key does not match public key; error codes: [108] 'Private key does not match public key',
at ru.CryptoPro.XAdES.XAdESSignature.addSigner(Unknown Source)
at ru.CryptoPro.XAdES.XAdESSignature.addSigner(Unknown Source)
at ru.CryptoPro.XAdES.XAdESSignature.addSigner(Unknown Source)
at ru.CryptoPro.XAdES.XAdESSignature.addSigner(Unknown Source)
at org.example.Main.main(Main.java:102)
Caused by: Private key does not match public key; error codes: [108] 'Private key does not match public key',

я так понимаю что он не построил цепочку сертификатов и сравнивает приватный ключ корневого сертификата с открытым сертификата УЦ

Отредактировано пользователем 3 ноября 2023 г. 11:46:45(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#6 Оставлено : 3 ноября 2023 г. 18:47:41(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Если у вас сертификат ключа подписи - это certificate из ks.getCertificate(alias), то попробуйте его поместить первым в списке chain, который отдаете в addSigner. Сейчас там первый - некий subscriberCert от subscriberCertPath.
Offline MEPPO  
#7 Оставлено : 7 ноября 2023 г. 4:18:33(UTC)
MEPPO

Статус: Новичок

Группы: Участники
Зарегистрирован: 25.08.2023(UTC)
Сообщений: 8
Откуда: Кемерово

Сказал(а) «Спасибо»: 1 раз
Автор: Евгений Афанасьев Перейти к цитате
Если у вас сертификат ключа подписи - это certificate из ks.getCertificate(alias), то попробуйте его поместить первым в списке chain, который отдаете в addSigner. Сейчас там первый - некий subscriberCert от subscriberCertPath.


Здравствуйте, в таком случае он выдает
нояб. 03, 2023 3:44:47 PM ru.CryptoPro.reprov.certpath.CertPathHelperImpl a
WARNING: ERROR
java.lang.reflect.InaccessibleObjectException: Unable to make void java.security.cert.X509CertSelector.setPathToNamesInternal(java.util.Set) accessible: module java.base does not "opens java.security.cert" to unnamed module @34340fab
at java.base/java.lang.reflect.AccessibleObject.throwInaccessibleObjectException(AccessibleObject.java:387)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:363)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:311)
at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:201)
at java.base/java.lang.reflect.Method.setAccessible(Method.java:195)
at ru.CryptoPro.reprov.certpath.CertPathHelperImpl.a(Unknown Source)
at ru.CryptoPro.reprov.certpath.CertPathHelper.b(Unknown Source)
at ru.CryptoPro.reprov.certpath.ForwardBuilder.b(Unknown Source)
at ru.CryptoPro.reprov.certpath.ForwardBuilder.a(Unknown Source)
at ru.CryptoPro.reprov.certpath.SunCertPathBuilder.a(Unknown Source)
at ru.CryptoPro.reprov.certpath.SunCertPathBuilder.a(Unknown Source)
at ru.CryptoPro.reprov.certpath.SunCertPathBuilder.a(Unknown Source)
at ru.CryptoPro.reprov.certpath.SunCertPathBuilder.a(Unknown Source)
at ru.CryptoPro.reprov.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
at ru.CryptoPro.reprov.CPCertPathBuilder.engineBuild(Unknown Source)
at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297)
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl$1CertPathBuilderWrapper.build(Unknown Source)
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
at ru.CryptoPro.XAdES.XAdESSignature.addSigner(Unknown Source)
at ru.CryptoPro.XAdES.XAdESSignature.addSigner(Unknown Source)
at ru.CryptoPro.XAdES.XAdESSignature.addSigner(Unknown Source)
at ru.CryptoPro.XAdES.XAdESSignature.addSigner(Unknown Source)
at org.example.Main.main(Main.java:101)

нояб. 03, 2023 3:44:47 PM ru.CryptoPro.reprov.certpath.CertPathHelperImpl a
WARNING: ERROR
java.lang.reflect.InaccessibleObjectException: Unable to make void java.security.cert.X509CertSelector.setPathToNamesInternal(java.util.Set) accessible: module java.base does not "opens java.security.cert" to unnamed module @34340fab
at java.base/java.lang.reflect.AccessibleObject.throwInaccessibleObjectException(AccessibleObject.java:387)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:363)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:311)
at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:201)
at java.base/java.lang.reflect.Method.setAccessible(Method.java:195)
at ru.CryptoPro.reprov.certpath.CertPathHelperImpl.a(Unknown Source)
at ru.CryptoPro.reprov.certpath.CertPathHelper.b(Unknown Source)
at ru.CryptoPro.reprov.certpath.ForwardBuilder.b(Unknown Source)
at ru.CryptoPro.reprov.certpath.ForwardBuilder.a(Unknown Source)
at ru.CryptoPro.reprov.certpath.SunCertPathBuilder.a(Unknown Source)
at ru.CryptoPro.reprov.certpath.SunCertPathBuilder.a(Unknown Source)
at ru.CryptoPro.reprov.certpath.SunCertPathBuilder.a(Unknown Source)
at ru.CryptoPro.reprov.certpath.SunCertPathBuilder.a(Unknown Source)
at ru.CryptoPro.reprov.certpath.SunCertPathBuilder.a(Unknown Source)
at ru.CryptoPro.reprov.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
at ru.CryptoPro.reprov.CPCertPathBuilder.engineBuild(Unknown Source)
at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297)
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl$1CertPathBuilderWrapper.build(Unknown Source)
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
at ru.CryptoPro.XAdES.XAdESSignature.addSigner(Unknown Source)
at ru.CryptoPro.XAdES.XAdESSignature.addSigner(Unknown Source)
at ru.CryptoPro.XAdES.XAdESSignature.addSigner(Unknown Source)
at ru.CryptoPro.XAdES.XAdESSignature.addSigner(Unknown Source)
at org.example.Main.main(Main.java:101)

Exception in thread "main" Root certificate: serial 951fa3477c61043aadfa858627823442, subject CN=Минцифры России, OID.1.2.643.100.4=#120a37373130343734333735, OID.1.2.643.100.1=#120d31303437373032303236373031, O=Минцифры России, STREET="Пресненская набережная, дом 10, строение 2", L=г. Москва, ST=77 Москва, C=RU, EMAILADDRESS=dit@digital.gov.ru, issuer CN=Минцифры России, OID.1.2.643.100.4=#120a37373130343734333735, OID.1.2.643.100.1=#120d31303437373032303236373031, O=Минцифры России, STREET="Пресненская набережная, дом 10, строение 2", L=г. Москва, ST=77 Москва, C=RU, EMAILADDRESS=dit@digital.gov.ru, not before Sat Jan 08 20:32:39 NOVT 2022, not after Sun Jan 08 20:32:39 NOVT 2040 is untrusted; error codes: [32] 'Root certificate is in the certificate chain but not in cacerts',
at ru.CryptoPro.XAdES.XAdESSignature.addSigner(Unknown Source)
at ru.CryptoPro.XAdES.XAdESSignature.addSigner(Unknown Source)
at ru.CryptoPro.XAdES.XAdESSignature.addSigner(Unknown Source)
at ru.CryptoPro.XAdES.XAdESSignature.addSigner(Unknown Source)
at org.example.Main.main(Main.java:101)
Caused by: Root certificate: serial 951fa3477c61043aadfa858627823442, subject CN=Минцифры России, OID.1.2.643.100.4=#120a37373130343734333735, OID.1.2.643.100.1=#120d31303437373032303236373031, O=Минцифры России, STREET="Пресненская набережная, дом 10, строение 2", L=г. Москва, ST=77 Москва, C=RU, EMAILADDRESS=dit@digital.gov.ru, issuer CN=Минцифры России, OID.1.2.643.100.4=#120a37373130343734333735, OID.1.2.643.100.1=#120d31303437373032303236373031, O=Минцифры России, STREET="Пресненская набережная, дом 10, строение 2", L=г. Москва, ST=77 Москва, C=RU, EMAILADDRESS=dit@digital.gov.ru, not before Sat Jan 08 20:32:39 NOVT 2022, not after Sun Jan 08 20:32:39 NOVT 2040 is untrusted; error codes: [32] 'Root certificate is in the certificate chain but not in cacerts',
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.validateIfRootCertificateInTrustStoreAndAddToChain(Unknown Source)
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
... 5 more
сертификат в cacerts я загрузил
Offline Евгений Афанасьев  
#8 Оставлено : 7 ноября 2023 г. 12:37:04(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Какая версия JCP в формате x.y.zzzzz?
Offline MEPPO  
#9 Оставлено : 7 ноября 2023 г. 12:58:53(UTC)
MEPPO

Статус: Новичок

Группы: Участники
Зарегистрирован: 25.08.2023(UTC)
Сообщений: 8
Откуда: Кемерово

Сказал(а) «Спасибо»: 1 раз
Автор: Евгений Афанасьев Перейти к цитате
Какая версия JCP в формате x.y.zzzzz?

версия JCP 2.0.41789
Offline Евгений Афанасьев  
#10 Оставлено : 8 ноября 2023 г. 20:55:36(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Уверены, что версия 2.0.41789? А не версия JCP-A для java 10+? Поскольку 2.0.41789 для Java 8 и там нет модулей.

В JCP 2.0.42644-81dc08c9 (2022-05-20) для Java 8 и JCP 2.0.42646-A-ec904857 (2022-05-20) были доработки по части рефлексии в ru.CryptoPro.reprov, попробуйте с этими версиями или выше.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.