logo
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Margarita  
#1 Оставлено : 11 июля 2018 г. 7:15:26(UTC)
Margarita

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

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

Здравствуйте.
Использую КриптоПро Java csp-5.0.39267.
Программно была создана ключевая пара, запрос на сертификат и самоподписанный сертификат. Ключи и сертификат были успешно сохранены в хранилище.
На основе запроса был выпущен реальный сертификат (приходит кодированный в base64).
При попытке сохранить его получаю ошибку:
java.security.KeyStoreException: java.security.KeyException: Certificate is not correct: ru.CryptoPro.JCSP.MSCAPI.MSKeyParamException: KeyParam ERROR: 0x80090020
Сертификат точно соответствует ключам.

// String certBase64 - полученный сертификат
// String keyStoreName - имя хранилища
String certificateString = new String(Base64.getDecoder().decode(certBase64));
InputStream certificateStream = new ByteArrayInputStream(certificateString.getBytes(StandardCharsets.UTF_8));

KeyStore ks = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME);
ks.load(null, null);
CertificateFactory cf = CertificateFactory.getInstance("X509");
Certificate cert = cf.generateCertificate(certificateStream); // cert создается и выводится
ks.setCertificateEntry(keyStoreName, cert); // на этой строке падает
ks.store(null, null);

Подскажите, пожалуйста, из-за чего может возникать ошибка?
Online afev  
#2 Оставлено : 11 июля 2018 г. 9:57:30(UTC)
afev

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

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

Сказал(а) «Спасибо»: 12 раз
Поблагодарили: 277 раз в 275 постах
Здравствуйте.
Складывается впечатление, что проблема в сертификате (0x80090020 - Внутренняя ошибка.). Не могли бы вы его приложить? Порядок действий такой:
1. создаете KeyPair;
2. Создаете GostCertificateRequest;
3. Получаете запрос, сохраняете его;
4. Создаете самоподписанный сертификат с помощью getSelfCert в GostCertificateRequest;
5. Сохраняете в keyStore с ключом с помощью setEntry;
6. Выпускаете в УЦ сертификат по запросу;
7. Пробуете установить его в keyStore - получаете ошибку.
Техническую поддержку оказываем тут
Наша база знаний
Offline Margarita  
#3 Оставлено : 11 июля 2018 г. 10:44:34(UTC)
Margarita

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

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

Прикладываю сертификат, который не получилось загрузить test_Cert.txt (2kb) загружен 3 раз(а).
Проделала все шаги, только в качестве УЦ использовала ваш тестовый - и все успешно без ошибок сохранилось.
Offline Margarita  
#4 Оставлено : 11 июля 2018 г. 12:31:22(UTC)
Margarita

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

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

Однако при повторной попытке сохранения сертификата получаю ту же ошибку. Хотя в документации сказано, что он должен перезаписаться.
Online afev  
#5 Оставлено : 11 июля 2018 г. 14:17:36(UTC)
afev

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

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

Сказал(а) «Спасибо»: 12 раз
Поблагодарили: 277 раз в 275 постах
спасибо, проверим. я правильно понял, что у вас ошибка повторяется для любого сертификата? какая версия csp в формате x.x.xxxxx используется?
Техническую поддержку оказываем тут
Наша база знаний
Offline Margarita  
#6 Оставлено : 11 июля 2018 г. 14:33:42(UTC)
Margarita

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

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

Стоит CSP 4.0.9842 для linux.
Не совсем для каждого. Сертификат, который мне выпустил сторонний УЦ, не записался вообще,
а сертификат, сделанный в вашем тестовом УЦ, записался, но при второй попытке перезаписи получилась ошибка.

Проверила еще раз. На новом сертификате из вашего УЦ, перезапись сработала.

Отредактировано пользователем 11 июля 2018 г. 15:01:20(UTC)  | Причина: Не указана

Online afev  
#7 Оставлено : 16 июля 2018 г. 10:33:14(UTC)
afev

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

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

Сказал(а) «Спасибо»: 12 раз
Поблагодарили: 277 раз в 275 постах
Здравствуйте.
В следующих условиях воспроизвести не удалось:
Ubuntu 13.10 x86
Код:

CSP (Type:80) v4.0.9018 KC1 Release Ver:4.0.9953 OS:Linux CPU:IA32 FastCode:READY:AVX.

java-csp-5.0.39267
Пример:
Код:

    public static void main(String[] args) throws Exception {

        String alias = "test";
        String dn = "CN=Margarita";
        String alg = JCP.GOST_EL_SIGN_NAME;

        KeyStore keyStore = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME);
        keyStore.load(null, null);

        KeyPairGenerator kpg = KeyPairGenerator.getInstance(JCP.GOST_EL_DEGREE_NAME, JCSP.PROVIDER_NAME);
        KeyPair kp = kpg.generateKeyPair();

        // самоподписанный

        GostCertificateRequest request = new GostCertificateRequest(JCSP.PROVIDER_NAME);
        byte[] selfCertEncoded = request.getEncodedSelfCert(kp, dn, alg);

        CertificateFactory factory = CertificateFactory.getInstance("X.509");
        X509Certificate selfCert = (X509Certificate) factory.generateCertificate(new ByteArrayInputStream(selfCertEncoded));

        JCPProtectionParameter parameter = new JCPProtectionParameter("123".toCharArray());
        JCPPrivateKeyEntry entry = new JCPPrivateKeyEntry(kp.getPrivate(), new Certificate[] {selfCert});

        // сохраняем заглушку и ключ

        keyStore.setEntry(alias, entry, parameter);
        System.out.println("OK-1");

        // выпускаем сертификат в УЦ

        request = new GostCertificateRequest(JCSP.PROVIDER_NAME);

        int keyUsage =
            GostCertificateRequest.DIGITAL_SIGNATURE |
            GostCertificateRequest.NON_REPUDIATION;

        request.setKeyUsage(keyUsage);
        request.addExtKeyUsage(GostCertificateRequest.INTS_PKIX_EMAIL_PROTECTION);

        request.setPublicKeyInfo(kp.getPublic());
        request.setSubjectInfo(dn);

        request.encodeAndSign(kp.getPrivate(), alg);
        byte[] certEncoded = request.getEncodedCert("http://www.cryptopro.ru/certsrv/");

        // устанавливаем 2 раза!

        X509Certificate cert = (X509Certificate) factory
            .generateCertificate(new ByteArrayInputStream(certEncoded));

        keyStore.setCertificateEntry(alias, cert);
        System.out.println("OK-2");

        keyStore.setCertificateEntry(alias, cert); // еще раз
        System.out.println("OK-3");

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