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

Уведомление

Icon
Error

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

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

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

Добрый день!
Возникла необходимость подписывать документы для отправки в Госключ с использованием СМЭВ3. По документации подходит подпись CAdES BES в кодировках base64 и DES.
Пытаюсь использовать КриптоПро JCP 2.0.41940-A.

Возникли следующие впоросы:
1) Код для создания и проверки подписи, по документации:
Код:
public void generateSign(MultipartFile file) {
        JCPInit.initProviders(false);

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

        PrivateKey privateKey = (PrivateKey) keyStore.getKey("alias", "password".toCharArray());

        Certificate[] certificateChain = keyStore.getCertificateChain("alias");
        List<X509Certificate> certList = Arrays.stream(certificateChain)
            .map(c -> (X509Certificate) c)
            .toList();

        CAdESSignature cadesSignature = new CAdESSignature(true);
        cadesSignature.addSigner(
            JCP.PROVIDER_NAME,
            privateKey,
            certList,
            CAdES_BES,
            null,
            false
        );

        ByteArrayOutputStream signatureStream = new ByteArrayOutputStream();

        cadesSignature.open(signatureStream); 
        cadesSignature.update(file.getBytes()); 

        cadesSignature.close(); 
        signatureStream.close();

        byte[] cadesCms = signatureStream.toByteArray();

        // Проверка
        CAdESSignature checkedSignature = new CAdESSignature(cadesCms, file.getBytes(), CAdES_BES);
        checkedSignature.verify(new HashSet<>(certList), null);
    }


При проверке на вызове new CAdESSignature(cadesCms, file.getBytes(), CAdES_BES) падает в ошибку: java.lang.NoSuchMethodError: 'org.bouncycastle.asn1.ASN1Primitive org.bouncycastle.asn1.cms.Attribute.toASN1Object()'
Либы bouncycastle использую из дистрибутива версии 1.60. В чём может быть причина?

2) Не совсем понимаю, как обеспечить кодировку base64. При создании подписи не вижу никаких параметров. Или подразумевается итоговый массив байт самоcтоятельно кодировать в base64?

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