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

Уведомление

Icon
Error

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

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

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

Поблагодарили: 1 раз в 1 постах
Здравствуйте.
Использую КриптоПро 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);

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

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

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

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

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

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

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

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

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

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

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
спасибо, проверим. я правильно понял, что у вас ошибка повторяется для любого сертификата? какая версия csp в формате x.x.xxxxx используется?
Offline Margarita  
#6 Оставлено : 11 июля 2018 г. 17:33:42(UTC)
Margarita

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

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

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

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

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

Offline Евгений Афанасьев  
#7 Оставлено : 16 июля 2018 г. 13:33:14(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте.
В следующих условиях воспроизвести не удалось:
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");

    }
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Санчир Момолдаев оставлено 23.12.2019(UTC)
Offline karpenko_vasily  
#8 Оставлено : 27 июля 2018 г. 10:36:09(UTC)
karpenko_vasily

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

Группы: Участники
Зарегистрирован: 13.06.2018(UTC)
Сообщений: 37

Сказал(а) «Спасибо»: 8 раз
Автор: Margarita Перейти к цитате
Стоит CSP 4.0.9842 для linux.
Не совсем для каждого. Сертификат, который мне выпустил сторонний УЦ, не записался вообще,
а сертификат, сделанный в вашем тестовом УЦ, записался, но при второй попытке перезаписи получилась ошибка.

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


Маргарита, Вам удалось сохранить сертификат указанным способом
ks.setCertificateEntry(keyStoreName, cert)?
Offline Margarita  
#9 Оставлено : 27 июля 2018 г. 10:52:29(UTC)
Margarita

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

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

Поблагодарили: 1 раз в 1 постах
Я пыталась сохранить той же самой функцией, которую вы предложили. Но видимо проблема была в одном конкретном сертификате, потому что при следующих попытках все отрабатывало. По бизнес требованиям я поняла, что мне не обязательно его сохранять в контейнер, поэтому больше проблемой не занималась.
thanks 1 пользователь поблагодарил Margarita за этот пост.
karpenko_vasily оставлено 27.07.2018(UTC)
Offline karpenko_vasily  
#10 Оставлено : 27 июля 2018 г. 10:59:40(UTC)
karpenko_vasily

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

Группы: Участники
Зарегистрирован: 13.06.2018(UTC)
Сообщений: 37

Сказал(а) «Спасибо»: 8 раз
Автор: Margarita Перейти к цитате
Я пыталась сохранить той же самой функцией, которую вы предложили. Но видимо проблема была в одном конкретном сертификате, потому что при следующих попытках все отрабатывало. По бизнес требованиям я поняла, что мне не обязательно его сохранять в контейнер, поэтому больше проблемой не занималась.


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