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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Николай Старышкин  
#1 Оставлено : 4 февраля 2026 г. 15:05:41(UTC)
Николай Старышкин

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

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

Сказал(а) «Спасибо»: 1 раз
Добрый день! При попытке создать запрос на сертификат, для созданного средствами JCSP контейнера, возникает ошибка:
Цитата:

Caused by: java.security.InvalidKeyException: Алгоритм ключа не соответствует алгоритму подписи.
at ru.CryptoPro.JCSP.Sign.CryptoProSign.engineInitSign(Unknown Source)
at java.base/java.security.Signature.initSign(Signature.java:546)
at ru.CryptoPro.JCPRequest.GostCertificateRequest.sign(Unknown Source)
at ru.CryptoPro.JCPRequest.GostCertificateRequest.encodeAndSign(Unknown Source)
at ru.CryptoPro.JCPRequest.GostCertificateRequest.encodeAndSign(Unknown Source)
at ru.test.GenerateKeyPair.generate(GenerateKeyPair.java:64)(строка request.encodeAndSign(keyPair.getPrivate()))


Хотя всё сделано согласно документации

Код:
        KeyPairGenerator kg = KeyPairGenerator.getInstance(JCP.GOST_EL_2012_256_NAME, JCSP.PROVIDER_NAME);
        KeyStoreConfig keyStoreConfig = KeyStoreConfig.getInstance();
        String containerName = "testContainer1";
        String container = keyStoreConfig.getHDImage().makeContainerName(containerName);
        NameAlgIdSpec nameParams = new NameAlgIdSpec(container);
        kg.initialize(nameParams);
        KeyPair keyPair = kg.generateKeyPair();

        GostCertificateRequest request = new GostCertificateRequest(JCSP.PROVIDER_NAME);
        request.setKeyUsage(KeyUsage.SIGN_DEFAULT);
        request.setPublicKeyInfo(keyPair.getPublic());
        request.setSubjectInfo(new X500Name("Иванов Иван Иванович", "IT отдел", "ООО Рога и Копыта", "Новосибирск", "Новосибирская область", "RU"));

        request.encodeAndSign(keyPair.getPrivate());
        byte[] encoded = request.getEncoded();


Замена строки
Код:
request.setKeyUsage(KeyUsage.SIGN_DEFAULT);

на строку
Код:
request.init(JCP.GOST_EL_2012_256_NAME);

не помогает, к тому же метод init описан в документации как устаревший.

Прошу помочь понять, что я делаю не так.
Offline Евгений Афанасьев  
#2 Оставлено : 4 февраля 2026 г. 15:58:26(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 22 раз
Поблагодарили: 744 раз в 701 постах
Добрый день.

Попробуйте передать алгоритм подписи так:
Код:
request.encodeAndSign(keyPair.getPrivate(), JCP.GOST_SIGN_2012_256_NAME);
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Николай Старышкин оставлено 05.02.2026(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.